Contenu principal

Taxonomy Thumbnail

Taxonomy Thumbnail est une extension dédiée aux développeurs, permettant d’ajouter une « image à la une » aux termes de taxonomie.

Cela existe déjà, pourquoi refaire une extension ?

Lors d’un développement chez un client il y a quelques temps, nous avons dû utiliser une extension qui permet de faire cela (faute de temps), mais elle n’a pas été mise à jour depuis longtemps et utilise encore la vieille (et un peu cassée) modale des médias. De plus cela faisait longtemps que je voulais utiliser une autre extension (je vais y revenir), je me suis donc lancé.

UI

Assignation d'une miniature lors de la création d'un terme

Assignation d'une miniature lors de l'édition d'un terme

Les miniatures peuvent être ajoutées à la création d’un terme de taxonomie, ou plus tard sur sa page d’édition.
La liste des termes a une colonne affichant la miniature actuelle.
L’extension utilise donc la « nouvelle » modale des médias (celle apparue avec WP 3.5), pas la vieille « thickbox ».
Des efforts ont été faits au niveau accessibilité, il ne s’agit pas d’un simple bouton « Ajouter une miniature ». Par exemple, wp.a11y.speak() est utilisé si disponible. N’étant pas un expert a11y, si vous avez des suggestions d’amélioration, vos retours d’expérience seront les bienvenus.
Fonctionne avec ou sans JavaScript.
Si JavaScript est activé, les miniatures sont assignées via ajax lors de l’édition d’un terme, pas besoin de mettre à jour le terme donc.
Par défaut, l’UI est affichée pour toutes les taxonomies publiques, mais cela peut être filtré :

1234567

add_filter( 'sftth_taxonomies', 'my_taxonomies_with_thumbnail' );

function my_taxonomies_with_thumbnail( $taxonomies ) {
	unset( $taxonomies['post_tag'] );
	$taxonomies['my_custom_tax'] = 'my_custom_tax';
	return $taxonomies;
}

Template tags

Vous les trouverez dans inc/template-tags.php.
Note importante : pour WP 4.4+, ces fonctions utilisent term_id. Pour WP < 4.4, elles utilisent term_taxonomy_id.
J’ai essayé de répliquer les fonctions pour les miniatures d’article.

Récupérer l’ID de la miniature du terme :

get_term_thumbnail_id( $term_id )

Vérifier si le terme a une miniature attachée :

has_term_thumbnail( $term_id )

Afficher la miniature du terme :

the_term_thumbnail( $term_id, $size = 'post-thumbnail', $attr = '' )

Retourner la miniature du terme :

get_term_thumbnail( $term_id, $size = 'post-thumbnail', $attr = '' )

Assigner une miniature de terme :

set_term_thumbnail( $term_id, $thumbnail_id )

Supprimer la miniature du terme :

delete_term_thumbnail( $term_id )

Stocker les données

Avec WP 4.4 et supérieur, l’API term metas est utilisée.
En dessous de WP 4.4, il y a deux façons de stocker les IDs de miniature

  1. Utiliser des metas de taxonomie avec l’extension Meta for Taxonomies.
  2. Utiliser une option (un tableau sous la forme term_taxonomy_id => thumbnail_id). Le nom de l’option peut être personnalisé en définissant la constante SFTTH_OPTION_NAME sans wp-config.php

Récupérer les termes

Utilisez get_terms() avec un paramètre spécifique pour récupérer seulement les termes avec miniature :

123

$terms = get_terms( array(
	'with_thumbnail' => true,
) );

Avec WP 4.4 et supérieur, vous pouvez aussi utiliser un raccourci pour construire votre propre meta query :

123456789

$terms = get_terms( array(
	'meta_query' => array(
		'relation' => 'AND',
		array(
			// Any meta query.
		),
		sftth_meta_query(),
	),
) );

En dessous de WP 4.4, si vous utilisez l’extension Meta for Taxonomies, vous devriez toujours mettre les miniatures en cache lors d’une boucle. Avec 'with_thumbnail' => true c’est fait automatiquement, mais si vous voulez afficher tous les termes, même ceux sans miniature, il suffit de passer with_thumbnail à false :

123

$terms = get_terms( array(
	'with_thumbnail' => false,
) );

Il s’agit donc ici d’un get_terms() classique mais avec mise en cache des miniatures.

Désinstallation

Lors de la désinstallation de l’extension vous pouvez choisir de NE PAS supprimer les miniatures (les images ne sont pas supprimées hein ;) ) en définissant une constante dans wp-config.php :

define( 'SFTTH_KEEP_DATA', true );

Vous pouvez aussi simplement désactiver l’extension et la supprimer manuellement via ftp. La constante a l’avantage de pouvoir être définie à l’avance afin d’éviter une catastrophe si le client désinstalle l’extension par mégarde.

Traduction

Américain, Français.

Notes

L’extension devrait être compatible à partir de WP 3.5, mais n’a été testée qu’avec WP 4.2.2 jusque là.

Crédits : photo utilisée dans la bannière par Nicolas Janik (CC BY 2.0).