Comment créer des taxonomies personnalisées exclusives dans WordPress

Publié: 2022-03-11

WordPress, l'un des systèmes de blogs et de gestion de contenu open source les plus puissants, est utilisé pour alimenter une grande partie des interwebs. Jusqu'à un quart de tous les sites Web utilisent WordPress et la demande de services de développement WordPress ne manque pas.

Contrairement à de nombreux autres CMS, WordPress est apprécié par beaucoup pour sa flexibilité et sa personnalisation. Les taxonomies, l'une des principales fonctionnalités de WordPress, vous permettent d'organiser le contenu comme vous le souhaitez. Bien qu'il soit intégré avec quelques taxonomies par défaut, WordPress vous permet d'ajouter autant de taxonomies personnalisées que vous le souhaitez.

Cependant, pour que les taxonomies se comportent exactement comme vous le souhaitez, vous devrez peut-être manipuler certaines approches non documentées.

Représentation graphique des différentes options de taxonomie WordPress

Dans cet article, vous apprendrez comment vous pouvez définir des taxonomies personnalisées exclusives dans WordPress qui se comportent beaucoup plus comme des catégories que des balises, vous permettant de catégoriser vos publications beaucoup plus strictement que vous ne le pouvez.

Qu'est-ce qu'une taxonomie ?

Selon le codex WordPress :

Une taxonomie est un moyen de regrouper des éléments.

Par exemple, un tas de différents types de fruits peut être regroupé selon diverses caractéristiques, puis ces groupes peuvent se voir attribuer des noms.

Dans WordPress, les taxonomies sont utilisées pour regrouper les publications, les pages et même les types de publication personnalisés sous différents groupes.

Les noms des différents groupements d'une taxonomie sont appelés termes . Prenez les fruits, par exemple, et comment ils peuvent être regroupés en fonction de leurs couleurs. Dans ce cas, les noms des différentes couleurs seraient les termes.

Par défaut, WordPress est intégré avec quatre taxonomies : catégorie , balise , catégorie de lien et format de publication . Vous pouvez en savoir plus sur ces taxonomies par défaut ici.

Parmi ces taxonomies intégrées, les catégories et les balises sont très similaires mais présentent une différence importante : les catégories sont des taxonomies exclusives (c'est-à-dire que pour chaque publication, vous pouvez sélectionner au plus une catégorie) alors que chaque publication peut se voir attribuer plusieurs balises.

De plus, les catégories sont généralement prédéfinies, tandis que les balises peuvent être définies au fur et à mesure.

Définir des taxonomies personnalisées

Vous pouvez définir une taxonomie personnalisée à l'aide de la fonction register_taxonomy() . Vous pouvez en savoir plus sur la fonction ici.

Pour voir comment cette fonction fonctionne, définissons une taxonomie personnalisée pour les publications avec des photos de paysages.

 function view_init() { register_taxonomy( 'view', 'post', array( 'label' => __( 'View' ), 'capabilities' => array( 'assign_terms' => 'edit_guides', 'edit_terms' => 'publish_guides' ) ) ); } add_action( 'init', 'view_init' );

Dans l'extrait ci-dessus, nous définissons une nouvelle taxonomie pour les publications appelée view .

Vous pouvez penser que cette taxonomie est utilisée pour catégoriser les photos en fonction du type ou de la nature des vues présentes dans les photos (par exemple, montagne, lac ou forêt).

Comme toujours, les messages qui appartiennent à des termes spécifiques de cette catégorie apparaîtront sous /view/{view_name} .

La ligne des capacités dans l'extrait ci-dessus est facultative. Sans cela, WordPress attribuera par défaut les fonctionnalités aux mêmes utilisateurs que les publications. Comme indiqué ci-dessus, cela permettra à tout utilisateur disposant de la capacité personnalisée "edit_guides" d'attribuer la taxonomie à une publication et à tout utilisateur disposant de la capacité personnalisée "publish_guides" de créer de nouveaux éléments de taxonomie.

Selon la documentation officielle, quatre capacités peuvent être définies :

Les fonctionnalités de taxonomie incluent assignterms , editterms , manageterms (affiche la taxonomie dans la navigation de l'administrateur) et deleteterms .

Comment les taxonomies sont utilisées

Dans votre code, vous pouvez utiliser la fonction wp_set_object_terms() pour ajouter des termes aux objets à l'aide de la taxonomie. Vous pouvez lister les termes existants en utilisant la fonction the_terms() . De plus, vous pouvez utiliser la fonction wp_tag_cloud() pour générer un nuage de termes pour votre taxonomie personnalisée. Vous pouvez en savoir plus sur ces fonctions ici.

Du côté de l'interface utilisateur, WordPress crée une nouvelle méta-boîte sur les publications pour chaque taxonomie. La méta-boîte est similaire à la méta-boîte Balises qui vous permet de lier un ou plusieurs termes à votre message. C'est ce que WordPress fait par défaut, et c'est ce que nous pouvons changer en rendant une taxonomie exclusive : faire en sorte que la taxonomie personnalisée se comporte comme la taxonomie de catégorie.

Forcer l'exclusivité sur les taxonomies

Lorsque nous créons une taxonomie personnalisée avec la méthode register_taxonomy() , WordPress ajoute une méta-boîte avec une sélection d'éléments multiples à la page d'édition de publication :

À l'aide de cette boîte méta, un utilisateur peut choisir n'importe quel nombre de termes existants (déjà utilisés) et peut également ajouter de nouveaux termes à l'aide de la zone de texte.

Pour créer une taxonomie de type catégorie, où chaque article appartient à au plus une catégorie parmi un ensemble de catégories prédéfinies, vous pouvez le faire en modifiant légèrement WordPress :

  • Masquez la méta-boîte par défaut créée par WordPress.
  • Créez une méta-boîte personnalisée sur la page de post-édition qui fournira des contrôles pour la sélection d'un seul élément.
  • Enregistrez la valeur de taxonomie lorsque la publication est enregistrée.

Voyons chacune des étapes.

Masquer la méta-boîte par défaut créée par WordPress

Pour cela, nous devons définir les options show_in_quick_edit et meta_box_cb sur false lors de l'appel à register_taxonomy .

Capture d'écran d'une méta-boîte de taxonomie personnalisée dans laquelle vous pouvez ajouter des éléments à l'ensemble des termes disponibles

La première option masque la taxonomie dans le panneau d'édition rapide/en masse et la seconde option la masque dans la page d'édition :

 register_taxonomy( 'custom_taxonomy', 'post', array( 'labels' => array( 'name' => 'Custom Exclusive Taxonomy' ), 'show_in_quick_edit' => false, 'meta_box_cb' => false ));

Lorsque la métaboîte par défaut est masquée, des éléments peuvent être ajoutés à l'ensemble des termes disponibles de la taxonomie via la page de gestion de la taxonomie :

Capture d'écran d'une méta-boîte nommée Custom Exclusive Taxonomy avec plusieurs boutons radio

Créer une méta-boîte personnalisée sur la page d'édition de publication

Pour créer une méta-boîte personnalisée, nous pouvons utiliser le crochet WordPress add_meta_boxes . Vous pouvez en savoir plus sur le crochet ici.

 add_action('add_meta_boxes', 'add_custom_meta_box'); function add_custom_meta_box(){ add_meta_box( 'taxonomy_box', __('Custom Exclusive Taxonomy'), 'fill_custom_meta_box_content', 'post' ,'side'); }

Nous appelons la méthode add_meta_box avec les arguments suivants :

  • taxonomy_box - L'ID de la méta-boîte
  • __('Custom Exclusive Taxonomy') – Le titre de la métaboîte
  • fill_custom_meta_box_content - Une fonction utilisée pour remplir le contenu de la méta-boîte
  • post - Cela indique que la boîte méta doit apparaître sur la page d'édition de post.
  • side - Ceci indique l'endroit où la méta-boîte doit être insérée.

Remarquez comment nous avons spécifié taxonomy_box comme ID. Cependant, c'est la fonction dans le troisième paramètre qui nous permettra de définir ce qui ira dans la boîte.

Nous allons maintenant implémenter la fonction fill_custom_meta_box_content :

 <?php function fill_custom_meta_box_content( $post ) { $terms = get_terms( array( 'taxonomy' => 'custom_taxonomy', 'hide_empty' => false // Retrieve all terms )); // We assume that there is a single category $currentTaxonomyValue = get_the_terms($post->ID, 'custom_taxonomy')[0]; ?> <p>Choose taxonomy value</p> <p> <?php foreach($terms as $term): ?> <input type="radio" name="custom_taxonomy" value="<?php echo $term->term_id;?>"<?php if($term->term_id==$currentTaxonomyValue->term_id) echo "checked"; ?>> <label for="taxonomy_term_<?php echo $term->term_id;?>"><?php echo $term->name; ?></label> </input><br/> <?php endforeach; ?> </p> <?php }

Ici, nous récupérons d'abord tous les termes (c'est-à-dire les valeurs existantes) de la taxonomie. Nous les utiliserons pour afficher une liste de contrôles de bouton radio.

Ensuite, nous récupérons le terme de taxonomie actuellement sélectionné à l'aide de la fonction get_the_terms() - nous en avons besoin pour sélectionner le bouton radio correspondant.

Notez que cette fonction renvoie un tableau. En effet, par défaut, la publication peut avoir n'importe quel nombre de termes qui lui sont associés. Selon notre hypothèse, le poste a au plus un terme, nous accédons donc au premier élément du tableau. (Ce n'est pas grave si le tableau est vide ; nous obtiendrons null comme valeur actuelle et aucun bouton radio ne sera sélectionné.)

Le code d'émission HTML utilise custom_taxonomy comme nom des boutons radio et les ID de terme correspondants comme valeurs ; Les attributs d'ID de bouton radio sont uniquement utilisés pour se connecter aux balises d'étiquette. En conséquence, nous obtenons la méta-boîte personnalisée suivante :

Capture d'écran de la fonctionnalité "ajouter une nouvelle balise" de Custom Exclusive Taxonomy maintenant disponible sur la barre latérale du tableau de bord WordPress

Enregistrer la valeur de la taxonomie lors de l'enregistrement de la publication

Enfin, nous devons conserver la valeur de taxonomie lorsque la publication est enregistrée. Pour cela, nous pouvons utiliser le hook save_post :

 add_action('save_post', 'save_custom_taxonomy'); function save_custom_taxonomy($post_id){ if ( isset( $_REQUEST['custom_taxonomy'] ) ) wp_set_object_terms($post_id, (int)sanitize_text_field( $_POST['custom_taxonomy'] ), 'custom_taxonomy'); }

Et c'est tout! Nous avons fini.

Vous savez maintenant comment définir une taxonomie personnalisée qui se comportera comme la taxonomie de catégorie intégrée.

Remarque : WordPress a accepté une demande de fonctionnalité pour faciliter le basculement de l'exclusivité pour les taxonomies personnalisées. Cependant, le billet n'a pas vu beaucoup d'activité depuis un moment.

Emballer

Les taxonomies sont une fonctionnalité très puissante et utile dans WordPress. Prêts à l'emploi, ils n'ont pas la capacité de faire une catégorisation stricte des publications, mais comme pour presque tout dans WordPress, les taxonomies et les fonctionnalités associées sont extrêmement personnalisables. Cela nous permet d'ajouter cette capacité souvent nécessaire en quelques étapes.

L'approche introduite ici peut également être utilisée pour créer une interface utilisateur encore plus personnalisée sur les pages de post-édition pour la sélection des termes de taxonomie.

J'espère que vous avez trouvé utile ce tutoriel rapide sur la définition de taxonomies personnalisées exclusives !