{"id":233575,"date":"2023-02-16T10:17:00","date_gmt":"2023-02-16T07:17:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233575"},"modified":"2022-11-11T00:25:43","modified_gmt":"2022-11-10T21:25:43","slug":"aggiungi-unimpostazione-permalink-personalizzata-per-il-tuo-tipo-di-post-personalizzato-in-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/aggiungi-unimpostazione-permalink-personalizzata-per-il-tuo-tipo-di-post-personalizzato-in-wordpress\/","title":{"rendered":"Aggiungi un&#8217;impostazione Permalink personalizzata per il tuo tipo di post personalizzato in WordPress"},"content":{"rendered":"\n<p>Questo \u00e8 un tutorial su come aggiungere un&#8217;impostazione personalizzata alla pagina di amministrazione di WordPress &quot;Impostazioni &gt; Permalink&quot; per definire lo slug per il tuo tipo di post personalizzato. Se stai sviluppando un tema o un plug-in per altri che ha un tipo di post personalizzato integrato, l&#8217;aggiunta di questa impostazione sar\u00e0 apprezzata dall&#8217;utente per consentire loro di decidere la struttura dell&#8217;URL del tipo di post personalizzato.<\/p>\n<p>Non esaminer\u00f2 in dettaglio come aggiungere un tipo di post personalizzato; se non sei sicuro, ti consiglio di dare un&#8217;occhiata a <a href=\"https:\/\/awhitepixel.com\/blog\/how-to-create-custom-post-types-and-custom-taxonomies\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">come aggiungere un tipo di post personalizzato<\/a>.<\/p>\n<p>Supponi di avere un codice per registrare il tuo tipo di post personalizzato come questo:<\/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 parte che ci interessa \u00e8 l&#8217; <code>rewrite<\/code>argomento. \u00c8 qui che definiamo quale slug il tipo di post ricever\u00e0 davanti a tutti i suoi post. Il tuo codice per la registrazione di un tipo di post personalizzato potrebbe essere leggermente diverso, ad esempio senza &#8216; <code>with_front<\/code>&#8216;, ma quello che ci interessa qui \u00e8 &#8216; <code>slug<\/code>&#8216;:<\/p>\n<pre><code>'rewrite' =&gt; [\n    'slug' =&gt; 'reference',\n    'with_front' =&gt; false\n]<\/code><\/pre>\n<p>Con questo codice stai praticamente codificando quale sar\u00e0 lo slug permalink dei post. Un tipo di post per i riferimenti potrebbe essere utilizzato per molti tipi di utenti di contenuti e temi; ad es. progetto, portfolio, referenze di clienti, referenze di societ\u00e0 ecc. Per rendere flessibile il tuo tema potresti voler consentire all&#8217;utente del tema di decidere da solo lo slug del tipo di post.<\/p>\n<p>Quindi diamo un&#8217;occhiata a come farlo!<\/p>\n<h2>Aggiunta e salvataggio del campo<\/h2>\n<p>L&#8217;utilizzo dell&#8217;API delle impostazioni di WordPress semplifica in qualche modo questo per noi. Tutto ci\u00f2 di cui abbiamo bisogno \u00e8 aggiungere un campo delle impostazioni e dire a WordPress in quale pagina di amministrazione vogliamo che venga visualizzata, nel nostro caso la pagina delle impostazioni dei permalink. Tieni presente che dobbiamo scrivere una funzione che salvi effettivamente anche il valore, cosa che faremo alla fine.<\/p>\n<p>Agganciamo la nostra funzione al <code>admin_init<\/code>gancio e registriamo la nostra impostazione. Quando registriamo un&#8217;impostazione, definiamo quale funzione deve essere eseguita per l&#8217;output dell&#8217;impostazione:<\/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>L&#8217;impostazione dell&#8217;argomento quattro di <code>[add_settings_field](https:\/\/developer.wordpress.org\/reference\/functions\/add_settings_field\/)()<\/code>a <code>'permalink'<\/code>dice a WordPress di aggiungere l&#8217;impostazione alla pagina Impostazioni dei Permalink. L&#8217;argomento numero tre \u00e8 la funzione che WordPress dovrebbe eseguire durante l&#8217;output dell&#8217;impostazione, una funzione che definiamo in seguito (al di fuori della funzione agganciata):<\/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>In questa funzione viene semplicemente prodotto un testo del modulo di base <code>&lt;input&gt;<\/code>. Per il suo <code>value<\/code>attributo recuperiamo il valore dell&#8217;impostazione usando <code>[get_option](https:\/\/developer.wordpress.org\/reference\/functions\/get_option\/)()<\/code>. L&#8217; <code>placeholder<\/code>attributo \u00e8 facoltativo, ma \u00e8 buona norma inserire la base slug predefinita in modo che l&#8217;utente del tema sappia se desidera modificarne il valore o meno.<\/p>\n<p>Se salvi il tuo codice e vai alla pagina dei permalink di WordPress ora, dovresti vedere il tuo campo alla fine:<\/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=\"Aggiungi un&#039;impostazione Permalink personalizzata per il tuo tipo di post personalizzato in WordPress\" ><\/a><\/p>\n<p>Al momento l&#8217;impostazione non sta salvando il suo valore, questo \u00e8 il passaggio successivo.<\/p>\n<p>Abbiamo bisogno di aggiungere un&#8217;altra funzione agganciata <code>admin_init<\/code>che controlla se la nostra impostazione \u00e8 stata inviata o meno in forma di struttura permalink. E se \u00e8 cos\u00ec, dovrebbe essere salvato con <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>Quando si salvano le impostazioni dei Permalink viene inviato un modulo, quindi siamo in grado di ottenere i valori tramite la <code>$_POST<\/code>variabile globale di PHP. I valori inviati dal modulo vengono archiviati come una matrice con gli attributi del nome dell&#8217;input come chiavi. Nel nostro caso impostiamo un attributo name &#8216; <code>mytheme_reference_slug<\/code>&#8216; sul nostro input, cos\u00ec possiamo accedere al valore inviato con <code>$_POST['mytheme_reference_slug']<\/code>.<\/p>\n<p>Ora l&#8217;impostazione dovrebbe funzionare completamente nella pagina Impostazioni Permalink. La parte finale \u00e8 allegare il valore di questa impostazione al nostro tipo di post personalizzato.<\/p>\n<h2>Per rendere il nostro tipo di post personalizzato usa la nostra impostazione<\/h2>\n<p>Per fare in modo che il nostro tipo di post personalizzato utilizzi il valore personalizzato della nostra impostazione, torniamo alla <code>register_post_type()<\/code>chiamata di funzione e modifichiamo l&#8217; <code>rewrite<\/code>argomento in qualcosa del genere:<\/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>Tutto ci\u00f2 che facciamo qui \u00e8 recuperare il valore della nostra nuova opzione. Se \u00e8 vuoto <code>'reference'<\/code>verr\u00e0 utilizzato il valore predefinito ().<\/p>\n<p>E questo \u00e8 tutto! Ora il tuo tipo di post personalizzato utilizzer\u00e0 qualunque base slug sia impostata nella pagina Impostazioni Permalinks. Puoi aggiungere pi\u00f9 impostazioni allo stesso modo, ad esempio per tassonomie personalizzate.<\/p>\n<h2>Il codice completo<\/h2>\n<p>Tutti insieme ora.<\/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\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Questo \u00e8 un tutorial su come aggiungere un&#8217;impostazione personalizzata alla pagina di amministrazione di WordPress &#8220;Impostazioni > Permalink&#8221; per definire lo slug al tuo tipo di post personalizzato.<\/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":[896,896,720,835,1110,804,804,835,720,844,844,865,865],"tags":[1168],"class_list":["post-233575","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-sviluppatore","category-guida-per-principianti","category-n-a","category-php-6","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233575","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=233575"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233575\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/152962"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=233575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=233575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=233575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}