{"id":231357,"date":"2022-12-21T12:17:00","date_gmt":"2022-12-21T09:17:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231357"},"modified":"2022-12-07T10:26:44","modified_gmt":"2022-12-07T07:26:44","slug":"taxonomies-wordpress-termes-parents-enfants","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/taxonomies-wordpress-termes-parents-enfants\/","title":{"rendered":"Taxonomies WordPress : termes, parents, enfants"},"content":{"rendered":"\n<p>La cr\u00e9ation de taxonomies par programme semble \u00eatre un point qui revient de temps en temps pour ceux qui cr\u00e9ent des solutions pour les autres sur WordPress.<\/p>\n<p>Les taxonomies elles-m\u00eames peuvent m\u00eame \u00eatre un peu d\u00e9routantes ; cependant, j&rsquo;ai trouv\u00e9 que ce qui suit aide g\u00e9n\u00e9ralement \u00e0 solidifier un peu le concept\u00a0:<\/p>\n<p>Les taxonomies hi\u00e9rarchiques sont analogues aux cat\u00e9gories ; les taxonomies non hi\u00e9rarchiques sont analogues aux balises.<\/p>\n<p>Mais encore, disons que vous cr\u00e9ez une solution pour quelqu&rsquo;un de sorte que vous ayez besoin d&rsquo;importer des informations en tant que publication et d&rsquo;y appliquer une taxonomie. En outre, vous souhaitez peut-\u00eatre \u00e9galement appliquer une taxonomie parente \u00e0 la publication.<\/p>\n<p>Comment pouvons-nous faire cela?<\/p>\n<h2>Taxonomies WordPress: inscription, parents, enfants, etc.<\/h2>\n<p>La situation ressemble \u00e0 ceci\u00a0:<\/p>\n<p>Vous avez un article auquel une taxonomie sera appliqu\u00e9e. Si la taxonomie a un parent, nous souhaitons \u00e9galement l&rsquo;appliquer \u00e0 la publication.<\/p>\n<p>Pour ce faire, nous aurons besoin de quatre (peut-\u00eatre cinq) fonctions\u00a0:<\/p>\n<ol>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/register_taxonomy\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">registre_taxonomy<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_insert_term\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_insert_term<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/get_term_by\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_term_by<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_set_object_terms\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_set_object_terms<\/a><\/li>\n<\/ol>\n<p>J&rsquo;ajouterai \u00e9galement que je pense que c&rsquo;est une bonne id\u00e9e d&rsquo;utiliser <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/sanitize_title_with_dashes\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sanitize_title_with_dashes<\/a> si vous allez utiliser un type de cha\u00eene entrante non d\u00e9sinfect\u00e9e pour le slug du type de publication (mais ce n&rsquo;est pas n\u00e9cessaire si vous n&rsquo;\u00eates pas, bien s\u00fbr ).<\/p>\n<h3>1 Enregistrez la taxonomie<\/h3>\n<p>Pour cet exemple, nous allons cr\u00e9er une taxonomie pour un type de publication personnalis\u00e9.<\/p>\n<p>Comme cela peut \u00eatre n&rsquo;importe quoi sur lequel vous travaillez, je vais utiliser une variable appel\u00e9e <strong>$postType<\/strong> pour d\u00e9montrer <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-00-register-taxonomy-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">le point<\/a>.<\/p>\n<pre><code>&lt;?php\n\nregister_taxonomy(\n  'acme-category',\n  $postType,\n  [\n      'label' =&gt; 'Acme Categories',\n      'rewrite' =&gt; ['slug' =&gt; 'acme-category'],\n      'capabilities' =&gt; [\n          'manage_terms' =&gt; 'manage_options',\n          'edit_terms' =&gt; 'manage_options',\n          'delete_terms' =&gt; 'manage_options',\n          'assign_terms' =&gt; 'manage_options',\n      ],\n      'hierarchical' =&gt; true,\n  ]\n);<\/code><\/pre>\n<p>C&rsquo;est assez simple mais prenez note de <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_taxonomy\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la r\u00e9f\u00e9rence du code<\/a> :<\/p>\n<blockquote>\n<p>Une fonction simple pour cr\u00e9er ou modifier un objet de taxonomie en fonction des param\u00e8tres donn\u00e9s. Si vous modifiez un objet de taxonomie existant, notez que la <code>$object_type<\/code>valeur de l&rsquo;enregistrement d&rsquo;origine sera \u00e9cras\u00e9e.<\/p>\n<\/blockquote>\n<p>G\u00e9n\u00e9ralement, ce n&rsquo;est pas un probl\u00e8me, mais si vous travaillez sur une grosse application ou une application pr\u00e9existante, c&rsquo;est quelque chose \u00e0 garder \u00e0 l&rsquo;esprit.<\/p>\n<h3>2 Ins\u00e9rer un terme pour la taxonomie<\/h3>\n<p>Ensuite, supposons qu&rsquo;un <strong>$customPost<\/strong> est mis \u00e0 votre disposition et qu&rsquo;il a une fonction pour r\u00e9cup\u00e9rer son nom, son titre ou une autre propri\u00e9t\u00e9 utilis\u00e9e pour l&rsquo;identifier (autre que son ID).<\/p>\n<\/p>\n<p>Cela pourrait \u00eatre pass\u00e9 dans une fonction, ou il pourrait \u00eatre rendu disponible par toute utilisation d&rsquo;autres fonctions fournies par WordPress. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-01-wp-insert-term-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Dans cet exemple<\/a>, je vais utiliser une\u00a0 fonction <strong>getName()<\/strong> sur l&rsquo; objet <strong>$customPost\u00a0<\/strong>.<\/p>\n<pre><code>&lt;?php\n\n$termInfo = wp_insert_term(\n  $customPost-&gt;getName(),\n  'acme-category',\n  ['slug' =&gt; sanitize_title_with_dashes($customPost-&gt;getName())]\n);<\/code><\/pre>\n<p>Notez que je lis \u00e9galement le r\u00e9sultat de la fonction dans une\u00a0 variable <strong>$termInfo<\/strong>. Nous l&rsquo;utiliserons \u00e0 l&rsquo;\u00e9tape suivante pour rechercher le parent s&rsquo;il existe et l&rsquo;appliquer \u00e9galement \u00e0 notre objet de publication personnalis\u00e9.<\/p>\n<h3>3 Rechercher le parent d&rsquo;un terme<\/h3>\n<p>Ici, nous utiliserons le terme que nous venons de cr\u00e9er pour voir s&rsquo;il existe un parent pour celui-ci. Notez que s&rsquo;il renvoie false, alors la taxonomie n&rsquo;existe pas (ou si le terme n&rsquo;est pas trouv\u00e9).<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160701-61e7112a99bca.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-160701-61e7112a99bca.png\" alt=\"Taxonomies WordPress : termes, parents, enfants\" ><\/a><\/p>\n<p>\u00c0 cette fin, vous voudrez ajouter une condition \u00e0 votre code pour le cr\u00e9er, si n\u00e9cessaire. Pour garder le code concis, cependant, je l&rsquo;omets dans <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-02-get-term-by-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">le code suivant<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$parentTermInfo = get_term_by(\n  'term_taxonomy_id',\n  $termInfo['term_taxonomy_id'],\n  'acme-category',\n  ARRAY_A\n);<\/code><\/pre>\n<p>Remarquez que je stocke le r\u00e9sultat du code ci-dessus dans une\u00a0 variable <strong>$parentTermInfo<\/strong>. C&rsquo;est ainsi que nous pouvons transmettre ceci \u00e0 notre fonction finale pour appliquer les informations parent \u00e0 notre objet de publication.<\/p>\n<h3>4 Appliquer le terme \u00e0 une publication<\/h3>\n<p>Enfin, nous appliquerons le terme (ou les termes) s&rsquo;il existe un objet parent. Rappelez-vous que c&rsquo;est l\u00e0 que le conditionnel sera n\u00e9cessaire. En termes simples, s&rsquo;il n&rsquo;y a pas de parent, la <strong>valeur $parentTermInfo[&lsquo;parent&rsquo;]<\/strong> ne sera pas n\u00e9cessaire.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160701-61e7112e513f4.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-160701-61e7112e513f4.png\" alt=\"Taxonomies WordPress : termes, parents, enfants\" ><\/a><\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-04-wp-set-object-terms-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Mais pour le code ci-dessous<\/a>, nous supposons que nous l&rsquo;avons.<\/p>\n<pre><code>&lt;?php\n\nwp_set_object_terms(\n  $customPost-&gt;getId(),\n  [\n      $parentTermInfo['parent'],\n      $termInfo['term_id'],\n  ],\n  'acme-category',\n  true\n);<\/code><\/pre>\n<p>\u00c0 partir de la r\u00e9f\u00e9rence de code, notez que cela cr\u00e9era le terme s&rsquo;il n&rsquo;existe pas d\u00e9j\u00e0\u00a0; sinon, il utilisera ce qui est d\u00e9j\u00e0 d\u00e9fini et l&rsquo;appliquera au message.<\/p>\n<h2>Et.. Voila<\/h2>\n<p>D&rsquo;une mani\u00e8re g\u00e9n\u00e9rale, ce n&rsquo;est pas beaucoup de travail. Cela permet de s&rsquo;assurer que vous avez une compr\u00e9hension claire du fonctionnement des taxonomies et de leurs termes. De plus, il est \u00e9galement utile de savoir comment r\u00e9cup\u00e9rer le parent d&rsquo;un terme donn\u00e9 si c&rsquo;est ce que vous voulez faire (sinon, la troisi\u00e8me \u00e9tape n&rsquo;est pas n\u00e9cessaire).<\/p>\n<p>Mais j&rsquo;esp\u00e8re que les liens et le code ci-dessus vous fourniront tout ce dont vous avez besoin pour cr\u00e9er une taxonomie et l&rsquo;appliquer \u00e0 un article (ainsi qu&rsquo;\u00e0 un terme parent, si n\u00e9cessaire).<\/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>Supposons que vous cr\u00e9ez une solution telle que vous devez lui appliquer une taxonomie. De plus, vous souhaitez \u00e9galement appliquer une taxonomie parente \u00e0 la publication.<\/p>\n","protected":false},"author":1,"featured_media":235914,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[717,832,801,862],"tags":[1167],"class_list":["post-231357","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpeur","category-guide-pour-les-debutants","category-php-3","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231357","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=231357"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231357\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/235914"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231357"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231357"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231357"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}