{"id":234227,"date":"2023-02-16T09:59:00","date_gmt":"2023-02-16T06:59:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234227"},"modified":"2022-11-12T01:09:10","modified_gmt":"2022-11-11T22:09:10","slug":"ajouter-un-parametre-de-permalien-personnalise-pour-votre-type-de-publication-personnalise-dans-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/ajouter-un-parametre-de-permalien-personnalise-pour-votre-type-de-publication-personnalise-dans-wordpress\/","title":{"rendered":"Ajouter un param\u00e8tre de permalien personnalis\u00e9 pour votre type de publication personnalis\u00e9 dans WordPress"},"content":{"rendered":"\n<p>Ceci est un tutoriel sur la fa\u00e7on d&rsquo;ajouter un param\u00e8tre personnalis\u00e9 \u00e0 la page d&rsquo;administration de WordPress &quot;Param\u00e8tres&gt; Permaliens&quot; pour d\u00e9finir le slug pour votre type de publication personnalis\u00e9. Si vous d\u00e9veloppez un th\u00e8me ou un plugin pour d&rsquo;autres qui a un type de publication personnalis\u00e9 int\u00e9gr\u00e9, l&rsquo;ajout de ce param\u00e8tre sera appr\u00e9ci\u00e9 par son utilisateur pour lui permettre de d\u00e9cider de la structure d&rsquo;URL du type de message personnalis\u00e9.<\/p>\n<p>Je ne d\u00e9taillerai pas comment ajouter un type de message personnalis\u00e9\u00a0; si vous n&rsquo;\u00eates pas s\u00fbr, je vous recommande de jeter un \u0153il \u00e0 <a href=\"https:\/\/awhitepixel.com\/blog\/how-to-create-custom-post-types-and-custom-taxonomies\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la fa\u00e7on d&rsquo;ajouter un type de publication personnalis\u00e9<\/a>.<\/p>\n<p>Supposons que vous ayez un code pour enregistrer votre type de publication personnalis\u00e9 comme celui-ci\u00a0:<\/p>\n<pre><code>add_action('init', function() {\n    register_post_type('reference', [\n        'label' =&gt; __('References', 'txtdomain'),\n        'public' =&gt; true,\n        'menu_position' =&gt; 5,\n        'menu_icon' =&gt; 'dashicons-book',\n        'supports' =&gt; ['title', 'editor', 'thumbnail', 'author', 'custom-fields', 'revisions'],\n        'show_in_rest' =&gt; true,\n        'rewrite' =&gt; [\n            'slug' =&gt; 'reference',\n            'with_front' =&gt; false\n        ],\n        'labels' =&gt; [\n            'singular_name' =&gt; __('Reference', 'txtdomain'),\n            'add_new_item' =&gt; __('Add new reference', 'txtdomain'),\n            'new_item' =&gt; __('New reference', 'txtdomain'),\n            'view_item' =&gt; __('View reference', 'txtdomain'),\n            'not_found' =&gt; __('No references found', 'txtdomain'),\n            'not_found_in_trash' =&gt; __('No references found in trash', 'txtdomain'),\n            'all_items' =&gt; __('All references', 'txtdomain'),\n            'insert_into_item' =&gt; __('Insert into reference', 'txtdomain')\n        ],      \n    ]);\n});<\/code><\/pre>\n<p>La partie qui nous int\u00e9resse est l&rsquo; <code>rewrite<\/code>argument. C&rsquo;est ici que nous d\u00e9finissons quel slug le type de message obtiendra devant tous ses messages. Votre code pour enregistrer un type de message personnalis\u00e9 peut \u00eatre l\u00e9g\u00e8rement diff\u00e9rent, par exemple sans &lsquo; <code>with_front<\/code>&lsquo;, mais ce qui nous int\u00e9resse ici est &lsquo; <code>slug<\/code>&lsquo;\u00a0:<\/p>\n<pre><code>'rewrite' =&gt; [\n    'slug' =&gt; 'reference',\n    'with_front' =&gt; false\n]<\/code><\/pre>\n<p>Avec ce code, vous codez pratiquement en dur ce que sera le slug de permalien des messages. Un type de publication pour les r\u00e9f\u00e9rences peut \u00eatre utilis\u00e9 pour de nombreux types d&rsquo;utilisateurs de contenu et de th\u00e8me\u00a0; par exemple, projet, portefeuille, r\u00e9f\u00e9rences clients, r\u00e9f\u00e9rences d&rsquo;entreprise, etc. Pour rendre votre th\u00e8me flexible, vous pouvez autoriser l&rsquo;utilisateur du th\u00e8me \u00e0 d\u00e9cider lui-m\u00eame du slug du type de publication.<\/p>\n<p>Voyons donc comment proc\u00e9der\u00a0!<\/p>\n<h2>Ajouter et enregistrer le champ<\/h2>\n<p>L&rsquo;utilisation de l&rsquo;API Param\u00e8tres de WordPress simplifie quelque peu cela pour nous. Tout ce dont nous avons besoin est d&rsquo;ajouter un champ de param\u00e8tres et d&rsquo;indiquer \u00e0 WordPress sur quelle page d&rsquo;administration nous voulons qu&rsquo;il soit affich\u00e9 &#8211; dans notre cas, la page de param\u00e8tres des permaliens. Gardez \u00e0 l&rsquo;esprit que nous devons \u00e9crire une fonction qui enregistre \u00e9galement la valeur, ce que nous ferons \u00e0 la fin.<\/p>\n<p>Nous accrochons notre fonction au <code>admin_init<\/code>crochet et enregistrons notre param\u00e8tre. Lorsque nous enregistrons un param\u00e8tre, nous d\u00e9finissons la fonction qu&rsquo;il doit ex\u00e9cuter pour g\u00e9n\u00e9rer le param\u00e8tre\u00a0:<\/p>\n<pre><code>add_action('admin_init', function() {\n    add_settings_field('mytheme_reference_slug', __('References base', 'txtdomain'), 'mytest_reference_slug_output', 'permalink', 'optional');\n});<\/code><\/pre>\n<p>Le quatri\u00e8me argument de r\u00e9glage indique <code>[add_settings_field](https:\/\/developer.wordpress.org\/reference\/functions\/add_settings_field\/)()<\/code>\u00e0 <code>'permalink'<\/code>WordPress d&rsquo;ajouter le param\u00e8tre \u00e0 la page Param\u00e8tres des permaliens. L&rsquo;argument num\u00e9ro trois est la fonction que WordPress doit ex\u00e9cuter lors de la sortie du param\u00e8tre &#8211; une fonction que nous d\u00e9finissons ensuite (en dehors de la fonction accroch\u00e9e)\u00a0:<\/p>\n<pre><code>function mytest_reference_slug_output() {\n    ?&gt;\n    &lt;input name=\"mytheme_reference_slug\" type=\"text\" class=\"regular-text code\" value=\"&lt;?php echo esc_attr(get_option('mytheme_reference_slug')); ?&gt;\" placeholder=\"&lt;?php echo 'reference'; ?&gt;\" \/&gt;\n    &lt;?php\n}<\/code><\/pre>\n<p>Dans cette fonction, nous produisons simplement un texte de formulaire de base <code>&lt;input&gt;<\/code>. Pour son <code>value<\/code>attribut, nous r\u00e9cup\u00e9rons la valeur du param\u00e8tre en utilisant <code>[get_option](https:\/\/developer.wordpress.org\/reference\/functions\/get_option\/)()<\/code>. L&rsquo; <code>placeholder<\/code>attribut est facultatif, mais c&rsquo;est une bonne pratique de mettre votre base de slug par d\u00e9faut afin que l&rsquo;utilisateur du th\u00e8me sache s&rsquo;il veut ou non modifier sa valeur.<\/p>\n<p>Si vous enregistrez votre code et acc\u00e9dez \u00e0 votre page WordPress Permaliens maintenant, vous devriez voir votre champ \u00e0 la toute fin :<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152961-61e500224b55a.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-152961-61e500224b55a.png\" alt=\"Ajouter un param\u00e8tre de permalien personnalis\u00e9 pour votre type de publication personnalis\u00e9 dans WordPress\" ><\/a><\/p>\n<p>Pour le moment, le param\u00e8tre n&rsquo;enregistre pas sa valeur, c&rsquo;est l&rsquo;\u00e9tape suivante.<\/p>\n<p>Nous devons ajouter une autre fonction accroch\u00e9e \u00e0 <code>admin_init<\/code>celle-ci qui v\u00e9rifie si notre param\u00e8tre a \u00e9t\u00e9 soumis ou non sous forme de structure de permalien. Et si c&rsquo;est le cas, il devrait \u00eatre enregistr\u00e9 avec <code>[update_option](https:\/\/developer.wordpress.org\/reference\/functions\/update_option\/)()<\/code>.<\/p>\n<pre><code>add_action('admin_init', function() {\n    if (isset($_POST['permalink_structure'])) {\n        update_option('mytheme_reference_slug', trim($_POST['mytheme_reference_slug']));\n    }\n});<\/code><\/pre>\n<p>Lors de l&rsquo;enregistrement des param\u00e8tres Permaliens, un formulaire est soumis, nous pouvons donc obtenir les valeurs via la <code>$_POST<\/code>variable globale de PHP. Les valeurs soumises \u00e0 partir du formulaire sont stock\u00e9es sous forme de tableau avec les attributs de nom de l&rsquo;entr\u00e9e en tant que cl\u00e9s. Dans notre cas, nous d\u00e9finissons un attribut de nom &lsquo; <code>mytheme_reference_slug<\/code>&lsquo; sur notre entr\u00e9e, afin que nous puissions acc\u00e9der \u00e0 la valeur soumise avec <code>$_POST['mytheme_reference_slug']<\/code>.<\/p>\n<p>Maintenant, le param\u00e8tre devrait fonctionner pleinement dans la page Param\u00e8tres de permalien. La derni\u00e8re partie consiste \u00e0 attacher la valeur de ce param\u00e8tre \u00e0 notre type de publication personnalis\u00e9.<\/p>\n<h2>Faire en sorte que notre type de message personnalis\u00e9 utilise notre param\u00e8tre<\/h2>\n<p>Afin que notre type de publication personnalis\u00e9 utilise la valeur personnalis\u00e9e de notre param\u00e8tre, nous revenons \u00e0 l&rsquo; <code>register_post_type()<\/code>appel de fonction et modifions l&rsquo; <code>rewrite<\/code>argument en quelque chose comme ceci\u00a0:<\/p>\n<pre><code>'rewrite' =&gt; [\n    'slug' =&gt; (!empty(get_option('mytheme_reference_slug')))? get_option('mytheme_reference_slug'): 'reference',\n    'with_front' =&gt; false\n]<\/code><\/pre>\n<p>Tout ce que nous faisons ici, c&rsquo;est aller chercher la valeur de notre nouvelle option. S&rsquo;il est vide, la valeur par d\u00e9faut (<code>'reference'<\/code>) sera utilis\u00e9e.<\/p>\n<p>Et c&rsquo;est tout! Maintenant, votre type de message personnalis\u00e9 utilisera la base de slug d\u00e9finie dans la page Param\u00e8tres des permaliens. Vous pouvez ajouter d&rsquo;autres param\u00e8tres de la m\u00eame mani\u00e8re, par exemple pour les taxonomies personnalis\u00e9es.<\/p>\n<h2>Le code complet<\/h2>\n<p>Tous ensemble maintenant.<\/p>\n<pre><code>\/\/ Register custom post type\nadd_action('init', function() {\n    register_post_type('reference', [\n        'label' =&gt; __('References', 'txtdomain'),\n        'public' =&gt; true,\n        'menu_position' =&gt; 5,\n        'menu_icon' =&gt; 'dashicons-book',\n        'supports' =&gt; ['title', 'editor', 'thumbnail', 'author', 'custom-fields', 'revisions'],\n        'show_in_rest' =&gt; true,\n        'rewrite' =&gt; [\n            'slug' =&gt; (!empty(get_option('mytheme_reference_slug')))? get_option('mytheme_reference_slug'): 'reference',\n            'with_front' =&gt; false\n        ],\n        'labels' =&gt; [\n            'singular_name' =&gt; __('Reference', 'txtdomain'),\n            'add_new_item' =&gt; __('Add new reference', 'txtdomain'),\n            'new_item' =&gt; __('New reference', 'txtdomain'),\n            'view_item' =&gt; __('View reference', 'txtdomain'),\n            'not_found' =&gt; __('No references found', 'txtdomain'),\n            'not_found_in_trash' =&gt; __('No references found in trash', 'txtdomain'),\n            'all_items' =&gt; __('All references', 'txtdomain'),\n            'insert_into_item' =&gt; __('Insert into reference', 'txtdomain')\n        ],      \n    ]);\n});\n\u00a0\n\/\/ Add setting\nadd_action('admin_init', function() {\n    add_settings_field('mytheme_reference_slug', __('References base', 'txtdomain'), 'mytest_reference_slug_output', 'permalink', 'optional');\n});\n\u00a0\n\/\/ Setting output\nfunction mytest_reference_slug_output() {\n    ?&gt;\n    &lt;input name=\"mytheme_reference_slug\" type=\"text\" class=\"regular-text code\" value=\"&lt;?php echo esc_attr(get_option('mytheme_reference_slug')); ?&gt;\" placeholder=\"&lt;?php echo 'reference'; ?&gt;\" \/&gt;\n    &lt;?php\n}\n\u00a0\n\/\/ Save setting\nadd_action('admin_init', function() {\n    if (isset($_POST['permalink_structure'])) {\n        update_option('mytheme_reference_slug', trim($_POST['mytheme_reference_slug']));\n    }\n});<\/code><\/pre>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ceci est un tutoriel sur la fa\u00e7on d&rsquo;ajouter un param\u00e8tre personnalis\u00e9 \u00e0 la page d&rsquo;administration de WordPress \u00ab\u00a0Param\u00e8tres> Permaliens\u00a0\u00bb pour d\u00e9finir le slug \u00e0 votre type de publication personnalis\u00e9.<\/p>\n","protected":false},"author":1,"featured_media":152962,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,893,717,717,832,1110,801,801,832,841,841,862,862],"tags":[1167],"class_list":["post-234227","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-guide-pour-les-debutants","category-n-a","category-php-3","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234227","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=234227"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234227\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/152962"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=234227"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234227"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}