{"id":230797,"date":"2022-12-08T17:34:00","date_gmt":"2022-12-08T14:34:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230797"},"modified":"2022-12-07T11:57:27","modified_gmt":"2022-12-07T08:57:27","slug":"page-dedition-de-categorie-wordpress-personnalisee","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/page-dedition-de-categorie-wordpress-personnalisee\/","title":{"rendered":"Page d&rsquo;\u00e9dition de cat\u00e9gorie WordPress personnalis\u00e9e"},"content":{"rendered":"\n<p>L&rsquo;ajout de m\u00e9ta-bo\u00eetes, de champs et d&rsquo;autres informations suppl\u00e9mentaires \u00e0 WordPress est facile si vous connaissez les bons crochets et les bonnes API \u00e0 suivre. Mais que se passe-t-il si vous souhaitez ajouter des informations \u00e0 une page de taxonomie WordPress ?<\/p>\n<p>Par exemple, supposons que vous souhaitiez cr\u00e9er une page d&rsquo;\u00e9dition de cat\u00e9gorie WordPress personnalis\u00e9e ou, \u00e0 tout le moins, ajouter des informations personnalis\u00e9es \u00e0 une page de taxonomie\u00a0?<\/p>\n<p>Il est toujours possible de le faire, et c&rsquo;est encore relativement facile mais, encore une fois, vous devez conna\u00eetre les bons crochets \u00e0 utiliser, et cela d\u00e9pend aussi si vous travaillez avec les taxonomies int\u00e9gr\u00e9es ou une taxonomie personnalis\u00e9e.<\/p>\n<p>Pour cet article, je montrerai comment proc\u00e9der en utilisant une taxonomie hi\u00e9rarchique personnalis\u00e9e (ou, en termes plus simples, une cat\u00e9gorie personnalis\u00e9e).<\/p>\n<h2>Page d&rsquo;\u00e9dition de cat\u00e9gorie WordPress personnalis\u00e9e<\/h2>\n<p>Tout d&rsquo;abord, si vous choisissez de travailler avec une page de cat\u00e9gorie standard, vous verrez probablement quelque chose comme ceci\u00a0:<\/p>\n<p>Et les deux crochets avec lesquels vous devez travailler sont :<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/edit_category_form\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">edit_category_form<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/category_edit_form\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">category_edit_form<\/a><\/strong><\/li>\n<\/ul>\n<p>Si vous avez cliqu\u00e9 sur l&rsquo;un ou l&rsquo;autre des liens, vous remarquerez que ce dernier ne contient aucune information, mais que le premier indique\u00a0:<\/p>\n<blockquote>\n<p>L&rsquo;action\/le crochet edit_category_form peut \u00eatre utilis\u00e9 pour effectuer des actions suppl\u00e9mentaires sur l&rsquo;\u00e9cran de modification de cat\u00e9gorie. Par exemple, vous pouvez ajouter des champs de formulaire afin d&rsquo;enregistrer des informations suppl\u00e9mentaires pour une cat\u00e9gorie particuli\u00e8re.<\/p>\n<\/blockquote>\n<p>\u00c0 cette fin, je choisis g\u00e9n\u00e9ralement d&rsquo;utiliser ce crochet car il est bien d\u00e9fini dans le Codex. Dans cet article, cependant, je ne m&rsquo;int\u00e9resse qu&rsquo;au rendu des informations &#8211; pas \u00e0 l&rsquo;ajout de champs suppl\u00e9mentaires qui doivent \u00eatre enregistr\u00e9s.<\/p>\n<h3>C\u00e2blage des choses<\/h3>\n<p>Dans la forme la plus simple, la meilleure fa\u00e7on de commencer \u00e0 ajouter des informations personnalis\u00e9es \u00e0 ce type de page est de cr\u00e9er une fonction et de l&rsquo;attacher au crochet r\u00e9pertori\u00e9 ci-dessus. Dans sa forme la plus basique, cela ressemble <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c8eb7e636f9cd42f80908a94af7946a6#file-00-acme-display-object-ids-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 ceci\u00a0:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nadd_action('edit_category_form', 'acme_display_object_ids');\n\/**\n * Displays an ordered list of all of the object IDs for a given\n * taxonomy.\n *\/\nfunction acme_display_object_ids()\n{\n  \/\/ Code for displaying the Object IDs goes here.\n}<\/code><\/pre>\n<p>Cependant, si vous optez pour la route orient\u00e9e objet, vous pouvez choisir d&rsquo;avoir une classe qui accepte un crochet comme argument dans le constructeur et \u00e9coute le d\u00e9clenchement de cet \u00e9v\u00e9nement. Si tel est le cas, votre code peut ressembler <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c8eb7e636f9cd42f80908a94af7946a6#file-01-object-id-subscriber-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 ceci\u00a0:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nclass ObjectIdSubscriber\n{\n    \/**\n     * @var string the hook to which this class subscribes\n     *\/\n    private $hook;\n\n    \/**\n     * @param string $hook the hook to which this class is registered with WordPress\n     *\/\n    public function __construct(string $hook)\n    {\n      $this-&gt;hook = $hook;\n    }\n\n    \/**\n     * Renders all of the information for the object IDs.\n     *\/\n    public function load()\n    {\n        \/\/ Code for displaying the Object IDs goes here.\n    }\n}<\/code><\/pre>\n<p>Quoi qu&rsquo;il en soit, le fait est que vous devez disposer d&rsquo;une classe ou d&rsquo;une fonction connect\u00e9e \u00e0 un crochet qui affichera des informations lorsque l&rsquo;\u00e9cran sera pr\u00e9sent\u00e9.<\/p>\n<h3>Affichage des informations<\/h3>\n<p>\u00c0 partir de l\u00e0, vous aurez besoin de quelque chose \u00e0 rendre. Je suis fan de garder ma logique s\u00e9par\u00e9e, donc je cr\u00e9e g\u00e9n\u00e9ralement un r\u00e9pertoire <strong>View<\/strong>, puis je place les fichiers partiels pour les vues dans ce r\u00e9pertoire.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162303-61e73af3dd69a.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162303-61e73af3dd69a.png\" alt=\"Page d&#039;\u00e9dition de cat\u00e9gorie WordPress personnalis\u00e9e\" ><\/a><\/p>\n<p>Bien s\u00fbr, vous pouvez toujours cr\u00e9er la cha\u00eene HTML dans la fonction PHP (mais assurez-vous de nettoyer la sortie en utilisant quelque chose comme <strong><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_kses\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_kses<\/a><\/strong> ).<\/p>\n<p>Pour cet exemple, je vais faire simple\u00a0: je veux juste extraire une liste de tous les messages (ou objets, comme vous le verrez momentan\u00e9ment) de la base de donn\u00e9es et r\u00e9pertorier les informations sur la page. Pour ce faire, j&rsquo;aurai besoin de quelques requ\u00eates de base de donn\u00e9es, puis je pourrai parcourir la liste des r\u00e9sultats.<\/p>\n<p>Tout d&rsquo;abord, j&rsquo;ai besoin d&rsquo;une requ\u00eate qui r\u00e9cup\u00e8re le <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c8eb7e636f9cd42f80908a94af7946a6#file-02-term-taxonomy-id-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">term_taxonomy_id<\/a><\/strong> de la cat\u00e9gorie donn\u00e9e\u00a0:<\/p>\n<pre><code>&lt;?php\n\n\/\/ This will retrieve all of the term relationships from where we can get post IDs.\nglobal $wpdb;\n$termTaxonomyId = $wpdb-&gt;get_results(\n    $wpdb-&gt;prepare(\n        \"\n        SELECT DISTINCT term_taxonomy_id\n        FROM $wpdb-&gt;term_taxonomy\n        WHERE term_id = %s\n        \",\n        $tagId\n    ),\n    ARRAY_A\n);\n$termTaxonomyId = isset($termTaxonomyId[0])? $termTaxonomyId[0]: null;\nif (null === $termTaxonomyId) {\n    return null;\n}<\/code><\/pre>\n<p>Ensuite, je dois r\u00e9cup\u00e9rer une liste de tous les <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c8eb7e636f9cd42f80908a94af7946a6#file-03-object-ids-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ID d&rsquo;objets<\/a><\/strong> li\u00e9s par ce <strong>term_taxonomy_id<\/strong> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ This will retrieve all of the post IDs.\n$postIds = $wpdb-&gt;get_results(\n    $wpdb-&gt;prepare(\n        \"\n        SELECT object_id\n        FROM $wpdb-&gt;term_relationships\n        WHERE term_taxonomy_id = %s\n        \",\n        $termTaxonomyId\n    ),\n    ARRAY_A\n);\nif (empty($postIds)) {\n    return null;\n}<\/code><\/pre>\n<p>\u00c0 partir de l\u00e0, je peux ensuite utiliser la fonction (ou classe) d&rsquo;origine que j&rsquo;ai cr\u00e9\u00e9e pr\u00e9c\u00e9demment pour <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c8eb7e636f9cd42f80908a94af7946a6#file-04-render-data-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">restituer les informations<\/a><\/strong>\u00a0:<\/p>\n<pre><code>&lt;ul&gt;\n&lt;?php foreach ($postIds as $postId): ?&gt;\n  &lt;li&gt;&lt;?php echo $postId; ?&gt;&lt;\/li&gt;\n&lt;?php endforeach; ?&gt;\n&lt;\/ul&gt;<\/code><\/pre>\n<p>Mais il y a beaucoup de choses suppl\u00e9mentaires que vous pouvez faire \u00e0 partir de l\u00e0.<\/p>\n<h2>Il y a plus<\/h2>\n<p>Comme indiqu\u00e9, 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\u00e9s ou quoi que ce soit de la table <strong>wp_posts<\/strong> ).<\/p>\n<p>Une fois que vous avez ces informations, vous pouvez r\u00e9cup\u00e9rer toutes les informations telles que le titre, le contenu, les m\u00e9tadonn\u00e9es, diverses informations de date, etc.<\/p>\n<p>Le but de la publication, cependant, n&rsquo;est pas de montrer quelles informations r\u00e9cup\u00e9rer, mais comment r\u00e9cup\u00e9rer des informations pour une taxonomie donn\u00e9e, puis les restituer sur une page de cat\u00e9gorie WordPress personnalis\u00e9e. Et c&rsquo;est une fa\u00e7on simple de faire exactement cela.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le but de la publication, cependant, n&rsquo;est pas de montrer quelles informations r\u00e9cup\u00e9rer, mais comment r\u00e9cup\u00e9rer des informations pour une taxonomie donn\u00e9e, puis les restituer sur une page de cat\u00e9gorie WordPress personnalis\u00e9e.<\/p>\n","protected":false},"author":1,"featured_media":235442,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,717,801,862],"tags":[1167],"class_list":["post-230797","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-php-3","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230797","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=230797"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230797\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/235442"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=230797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=230797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=230797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}