Assigner un terme de taxonomie par défaut
Lorsque l’on crée un article dans WordPress et que l’on omet de lui définir une catégorie, le système lui attribue un terme « par défaut ». L’idée des concepteurs de cette fonctionnalité est de forcer tous les articles à appartenir au moins à une catégorie, afin de pouvoir facilement retrouver le contenu dans les archives.
Cette fonctionnalité a été pensé lorsque WordPress n’était encore qu’un simple moteur de blog, et son utilité est aujourd’hui discutable. Lors de l’entrée en scène des taxonomies et types de contenus personnalisés (WordPress 3.1), ce système de « terme par défaut » n’a donc pas été porté sur ces éléments.
Ce qui est amusant – dans le code source – c’est que l’attribution de la catégorie par défaut est codé de façon relativement rigide. Alors si vous avez un jour besoin de faire quelque chose de similaire avec un custom post type et une custom taxonomy, vous ne pourrez pas emprunter la méthode « native » ; voici ce qu’il faudra faire…
Assigner un terme de taxonomie lors de la sauvegarde
Imaginons que vous ayez un type de contenu mon-cpt
et une taxonomie ma-taxo
. Pour le besoin d’un projet vous avez besoin que tous les éléments de mon-cpt
soient assignés a au moins un terme de ma-taxo
, car ce type de contenu n’a pas d’archive : ces éléments n‘apparaissent sur le site que via les archives de termes.
Nous allons donc créer une fonction qui s’exécutera lors de l’action wp_insert_post
(c’est à dire lorsque l’élément vient d’être enregistré dans la base WordPress). Puis dans ce hook :
- On vérifie que le type de contenu en train d’être sauvegardé est bien celui qui nous intéresse ;
- on récupère la liste des termes liés à ce contenu ;
- si cette liste est vide, alors on assigne à cet objet le terme
default-term
grâce à la fonctionwp_set_object_terms
.
Et voilà, le tour est joué… ce bout de code peut être adapté et déposé dans le fichier functions.php de votre thème aussi bien que dans une extension.
Une option d’interface pour le choix du terme par défaut
Le code précédent fonctionne, mais il ne colle pas tout à fait à la fonctionnalité originelle de la « catégorie par défaut » ; pour celle-ci WordPress permet à l’utilisateur de choisir le nom du terme qu’il souhaite attribuer automatiquement. Cela se passe dans l’administration, dans les réglages d’écriture.
On peut faire pareil, il suffit de remplacer l’astuce de code précédente par celle ci-dessous.
De la ligne 1 à la ligne 19 nous avons mis en place une action dont le rôle est de créer notre option d’administration, et d’afficher un sélecteur des termes disponibles dans la page des réglages d’écriture.
Puis, ligne 28, nous avons adapté notre bout de code pour que le choix du terme à insérer par défaut soit lié à cette option.
Désactiver l’attribution du terme par défaut lors de l’update
Pour finir avec cette astuce, je voulais vous préciser qu’il est possible de faire pour que l’attribution du terme ne se fasse que lors du premier enregistrement. C’est à dire s’arranger pour forcer un terme de taxonomie à la création, puis de laisser ensuite l’utilisateur décocher toutes les catégories s’il le souhaite.
On joue simplement sur le troisième argument du hook wp_insert_post
, qui indique à la fonction s’il s’agit d’une création ou d’une mise à jour de contenu.
D’autres astuces de code à venir…
Cela fait quelques temps que j’hésitais à publier sur mon blog des articles un peu plus succincts. J’adore rédiger des articles de fond, mais ceux-ci me prennent beaucoup de temps à écrire. Je vais continuer de vous en préparer, mais en parallèle je pense que quelques code-snippets comme celui-ci peuvent vous servir.
J’espère que la série d’astuces à venir vous permettra de résoudre des problèmes que vous aviez autrement l’habitude de contourner 😉