Page d’édition de catégorie WordPress personnalisée
L’ajout de méta-boîtes, de champs et d’autres informations supplémentaires à WordPress est facile si vous connaissez les bons crochets et les bonnes API à suivre. Mais que se passe-t-il si vous souhaitez ajouter des informations à une page de taxonomie WordPress ?
Par exemple, supposons que vous souhaitiez créer une page d’édition de catégorie WordPress personnalisée ou, à tout le moins, ajouter des informations personnalisées à une page de taxonomie ?
Il est toujours possible de le faire, et c’est encore relativement facile mais, encore une fois, vous devez connaître les bons crochets à utiliser, et cela dépend aussi si vous travaillez avec les taxonomies intégrées ou une taxonomie personnalisée.
Pour cet article, je montrerai comment procéder en utilisant une taxonomie hiérarchique personnalisée (ou, en termes plus simples, une catégorie personnalisée).
Page d’édition de catégorie WordPress personnalisée
Tout d’abord, si vous choisissez de travailler avec une page de catégorie standard, vous verrez probablement quelque chose comme ceci :
Et les deux crochets avec lesquels vous devez travailler sont :
Si vous avez cliqué sur l’un ou l’autre des liens, vous remarquerez que ce dernier ne contient aucune information, mais que le premier indique :
L’action/le crochet edit_category_form peut être utilisé pour effectuer des actions supplémentaires sur l’écran de modification de catégorie. Par exemple, vous pouvez ajouter des champs de formulaire afin d’enregistrer des informations supplémentaires pour une catégorie particulière.
À cette fin, je choisis généralement d’utiliser ce crochet car il est bien défini dans le Codex. Dans cet article, cependant, je ne m’intéresse qu’au rendu des informations – pas à l’ajout de champs supplémentaires qui doivent être enregistrés.
Câblage des choses
Dans la forme la plus simple, la meilleure façon de commencer à ajouter des informations personnalisées à ce type de page est de créer une fonction et de l’attacher au crochet répertorié ci-dessus. Dans sa forme la plus basique, cela ressemble à ceci :
<?php
add_action('edit_category_form', 'acme_display_object_ids');
/**
* Displays an ordered list of all of the object IDs for a given
* taxonomy.
*/
function acme_display_object_ids()
{
// Code for displaying the Object IDs goes here.
}
Cependant, si vous optez pour la route orientée objet, vous pouvez choisir d’avoir une classe qui accepte un crochet comme argument dans le constructeur et écoute le déclenchement de cet événement. Si tel est le cas, votre code peut ressembler à ceci :
<?php
class ObjectIdSubscriber
{
/**
* @var string the hook to which this class subscribes
*/
private $hook;
/**
* @param string $hook the hook to which this class is registered with WordPress
*/
public function __construct(string $hook)
{
$this->hook = $hook;
}
/**
* Renders all of the information for the object IDs.
*/
public function load()
{
// Code for displaying the Object IDs goes here.
}
}
Quoi qu’il en soit, le fait est que vous devez disposer d’une classe ou d’une fonction connectée à un crochet qui affichera des informations lorsque l’écran sera présenté.
Affichage des informations
À partir de là, vous aurez besoin de quelque chose à rendre. Je suis fan de garder ma logique séparée, donc je crée généralement un répertoire View, puis je place les fichiers partiels pour les vues dans ce répertoire.
Bien sûr, vous pouvez toujours créer la chaîne HTML dans la fonction PHP (mais assurez-vous de nettoyer la sortie en utilisant quelque chose comme wp_kses ).
Pour cet exemple, je vais faire simple : je veux juste extraire une liste de tous les messages (ou objets, comme vous le verrez momentanément) de la base de données et répertorier les informations sur la page. Pour ce faire, j’aurai besoin de quelques requêtes de base de données, puis je pourrai parcourir la liste des résultats.
Tout d’abord, j’ai besoin d’une requête qui récupère le term_taxonomy_id de la catégorie donnée :
<?php
// This will retrieve all of the term relationships from where we can get post IDs.
global $wpdb;
$termTaxonomyId = $wpdb->get_results(
$wpdb->prepare(
"
SELECT DISTINCT term_taxonomy_id
FROM $wpdb->term_taxonomy
WHERE term_id = %s
",
$tagId
),
ARRAY_A
);
$termTaxonomyId = isset($termTaxonomyId[0])? $termTaxonomyId[0]: null;
if (null === $termTaxonomyId) {
return null;
}
Ensuite, je dois récupérer une liste de tous les ID d’objets liés par ce term_taxonomy_id :
<?php
// This will retrieve all of the post IDs.
$postIds = $wpdb->get_results(
$wpdb->prepare(
"
SELECT object_id
FROM $wpdb->term_relationships
WHERE term_taxonomy_id = %s
",
$termTaxonomyId
),
ARRAY_A
);
if (empty($postIds)) {
return null;
}
À partir de là, je peux ensuite utiliser la fonction (ou classe) d’origine que j’ai créée précédemment pour restituer les informations :
<ul>
<?php foreach ($postIds as $postId): ?>
<li><?php echo $postId; ?></li>
<?php endforeach; ?>
</ul>
Mais il y a beaucoup de choses supplémentaires que vous pouvez faire à partir de là.
Il y a plus
Comme indiqué, cela renvoie les ID des objets qui sont essentiellement des ID de publication (ou des ID de page ou des ID de type de publication personnalisés ou quoi que ce soit de la table wp_posts ).
Une fois que vous avez ces informations, vous pouvez récupérer toutes les informations telles que le titre, le contenu, les métadonnées, diverses informations de date, etc.
Le but de la publication, cependant, n’est pas de montrer quelles informations récupérer, mais comment récupérer des informations pour une taxonomie donnée, puis les restituer sur une page de catégorie WordPress personnalisée. Et c’est une façon simple de faire exactement cela.
