{"id":1993,"date":"2014-02-16T22:27:49","date_gmt":"2014-02-16T21:27:49","guid":{"rendered":"http:\/\/www.manuelmarangoni.it\/sir-bit\/?p=1993"},"modified":"2014-02-17T08:58:02","modified_gmt":"2014-02-17T07:58:02","slug":"wordpress-3-0-post-personalizzati-custom-post-type-esempio-completo","status":"publish","type":"post","link":"https:\/\/www.manuelmarangoni.it\/sir-bit\/1993\/wordpress-3-0-post-personalizzati-custom-post-type-esempio-completo\/","title":{"rendered":"WordPress 3.0 &#8211; Post personalizzati (Custom Post Type) &#8211; Esempio completo"},"content":{"rendered":"<p>Una delle funzionalit\u00e0 pi\u00f9 utili e potenti messe a disposizione da WordPress \u00e8 la possibilit\u00e0 di personalizzare a piacere l&#8217;uso degli articoli e delle categorie.<\/p>\n<p>Faccio una premessa.<br \/>\nGli articoli che siamo abituati a usare hanno in realt\u00e0 <strong>un \u00abtipo\u00bb associato: il tipo &#8220;post&#8221;<\/strong>. Allo stesso modo, le pagine hanno associato il tipo &#8220;page&#8221;. Di default troviamo poi altri tre tipi: &#8220;attachment&#8221;, &#8220;revision&#8221; e &#8220;nav_menu_item&#8221;.<\/p>\n<p>WordPress ci d\u00e0 la possibilit\u00e0 di creare dei nuovi tipi, in pratica delle aree separate in cui possiamo inserire articoli e categorie senza intaccare quelli principali.<br \/>\nSe, per esempio, abbiamo un sito che si occupa di musica e a un certo punto decidiamo di inserire una sezione per i film, ci sar\u00e0 utile <strong>creare una nuova area per i film<\/strong>, i cui articoli saranno tenuti ben distinti da quelli della musica.<br \/>\nI tipi personalizzati vengono denominati tecnicamente <em>Custom Post Type<\/em> (CPT).<\/p>\n<p>In questo articolo vedremo un <strong>esempio completo e minimale su come realizzare i CPT<\/strong>.<br \/>\nNello specifico, il nostro cliente immaginario ci ha commissionato la realizzazione di un&#8217;area per inserire i calendari delle partite di andata e ritorno di una squadra di pallavolo.<br \/>\nQuello di cui abbiamo bisogno \u00e8 di creare un&#8217;area personalizzata chiamata &#8220;Calendario&#8221;, che si occupa esattamente come un qualsiasi post ma che in lato sito sar\u00e0 visualizzata in una sezione a parte.<\/p>\n<p>I file completi sono <strong>scaricabili gratuitamente al seguente link<\/strong>. All&#8217;interno troverete un txt contenente la descrizione generale con i passi da seguire.<\/p>\n<div style=\"float: left; width: 100%; margin-top: 60px; margin-bottom: 40px;\">\n<div style=\"float: left; width: 100px;\"><img decoding=\"async\" title=\"Wordpress 3.0 - Post personalizzati (Custom Post Type) - Esempio completo\" alt=\"Wordpress 3.0 - Post personalizzati (Custom Post Type) - Esempio completo\" src=\"https:\/\/www.manuelmarangoni.it\/images\/zip_logo-80x80.png\" \/><\/div>\n<div style=\"float: left; width: 350px; padding-top: 30px; font-size: 14px;\"><strong><a title=\"Wordpress 3.0 - Post personalizzati (Custom Post Type) - Esempio completo\" href=\"https:\/\/www.manuelmarangoni.it\/download_script.php?idfile=40&amp;link=https:\/\/www.manuelmarangoni.it\/sir-bit\/1993\/wordpress-3-0-post-personalizzati-custom-post-type-esempio-completo\" target=\"_blank\">Scarica gli script di questo articolo in formato zip<\/a><\/strong><\/div>\n<\/div>\n<h3 style=\"margin-top: 50px; margin-bottom: 20px; color: #c00;\">Il plugin &#8220;MM Custom Type Calendario&#8221; [mm_custom_types.php]<\/h3>\n<p>Le basi del CPT le costruiremo <strong>attraverso un comodo plugin<\/strong>, che potr\u00e0 quindi essere esportato facilmente in altri progetti.<br \/>\nIl file &#8220;<strong>mm_custom_types.php<\/strong>&#8221; nello zip va inserito cos\u00ec com&#8217;\u00e8 nella cartella dei plugin di WordPress. Il plugin va poi attivato come al solito nell&#8217;apposita area dell&#8217;admi.<\/p>\n<p>Vediamo il contenuto del plugin.<br \/>\nHo cercato di introdurre quanti pi\u00f9 parametri possibili nella funzione, cos\u00ec da averli sottomano. Ogni parametro \u00e8 commentato. In realt\u00e0, i valori attributi a gran parte di questi parametri sono quelli di default e quindi potevano essere omessi.<br \/>\nPer personalizzare i parametri vedete la documentazione ufficiale della funzione &#8220;register_post_type()&#8221; di WordPress (a fondo articolo trovate il link diretto).<br \/>\n<!--more--><\/p>\n<p>Per prima cosa <strong>creiamo la funzione <em>crea_calendari()<\/em>.<\/strong> Sar\u00e0 questa a definire i parametri per comporre il nostro CPT.<br \/>\nAll&#8217;interno della funzione richiameremo <em>register_post_type()<\/em>, facendogli passare il riferimento (&#8220;calendario&#8221;, che in pratica sar\u00e0 il nome univoco che identificher\u00e0 il nostro CPT) e l&#8217;array contenente tutti i parametri definiti.<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13\r\n14\r\n15\r\n16\r\n17\r\n18\r\n19\r\n20\r\n21\r\n22\r\n23\r\n24\r\n25\r\n26\r\n27\r\n28\r\n29\r\n30\r\n31\r\n32\r\n33\r\n34\r\n35\r\n36\r\n37\r\n38\r\n39\r\n40\r\n41\r\n42\r\n43\r\n44\r\n45\r\n46\r\n47\r\n48\r\n49\r\n50\r\n51\r\n52\r\n53\r\n54\r\n55\r\n56\r\n57\r\n58\r\n59\r\n60<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"php\" style=\"font-family: monospace;\"><span style=\"color: #000000; font-weight: bold;\">function<\/span> crea_calendari<span style=\"color: #009900;\">(<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span>\r\n\r\n    <span style=\"color: #000088;\">$labels<\/span> <span style=\"color: #339933;\">=<\/span> <span style=\"color: #990000;\">array<\/span><span style=\"color: #009900;\">(<\/span>\r\n        <span style=\"color: #0000ff;\">'name'<\/span>               <span style=\"color: #339933;\">=&gt;<\/span> __<span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">'Calendari'<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/nome plurale dell'etichetta<\/span>\r\n        <span style=\"color: #0000ff;\">'singular_name'<\/span>      <span style=\"color: #339933;\">=&gt;<\/span> __<span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">'Calendario'<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/nome singolare dell'etichetta<\/span>\r\n\t<span style=\"color: #0000ff;\">'menu_name'<\/span>\t     <span style=\"color: #339933;\">=&gt;<\/span> __<span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">'Calendari Menu'<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/nome del menu<\/span>\r\n\t<span style=\"color: #0000ff;\">'all_items'<\/span>          <span style=\"color: #339933;\">=&gt;<\/span> __<span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">'Elenco Calendari'<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/testo per mostrare tutti gli elementi<\/span>\r\n        <span style=\"color: #0000ff;\">'add_new'<\/span>            <span style=\"color: #339933;\">=&gt;<\/span> __<span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">'Aggiungi Calendario'<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/testo del pulsante di aggiunta nuovo elemento<\/span>\r\n        <span style=\"color: #0000ff;\">'add_new_item'<\/span>       <span style=\"color: #339933;\">=&gt;<\/span> __<span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">'Nuovo Calendario'<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/testo da mostrare quando siamo all'interno di un nuovo elemento<\/span>\r\n        <span style=\"color: #0000ff;\">'edit_item'<\/span>          <span style=\"color: #339933;\">=&gt;<\/span> __<span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">'Modifica Calendario'<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/testo di modifica dell'elemento<\/span>\r\n        <span style=\"color: #0000ff;\">'new_item'<\/span>           <span style=\"color: #339933;\">=&gt;<\/span> __<span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">'Nuovo Calendario'<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/testo del nuovo elemento<\/span>\r\n        <span style=\"color: #0000ff;\">'view_item'<\/span>          <span style=\"color: #339933;\">=&gt;<\/span> __<span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">'Visualizza Calendario'<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/testo di visualizzazione dell'elemento<\/span>\r\n        <span style=\"color: #0000ff;\">'search_items'<\/span>       <span style=\"color: #339933;\">=&gt;<\/span> __<span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">'Cerca Calendario'<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/testo per la ricerca degli elementi<\/span>\r\n        <span style=\"color: #0000ff;\">'not_found'<\/span>          <span style=\"color: #339933;\">=&gt;<\/span> __<span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">'Calendario non trovato'<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/testo quando non esistono elementi nell'elenco<\/span>\r\n        <span style=\"color: #0000ff;\">'not_found_in_trash'<\/span> <span style=\"color: #339933;\">=&gt;<\/span> __<span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">'Calendario non trovato nel cestino'<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/testo quando non esistono elementi nel cestino<\/span>\r\n    <span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n    <span style=\"color: #000088;\">$args<\/span> <span style=\"color: #339933;\">=<\/span> <span style=\"color: #990000;\">array<\/span><span style=\"color: #009900;\">(<\/span>\r\n                <span style=\"color: #0000ff;\">'labels'<\/span>             <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #000088;\">$labels<\/span><span style=\"color: #339933;\">,<\/span>\r\n\t\t<span style=\"color: #0000ff;\">'description'<\/span>\t     <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #0000ff;\">'Raccolta dei Calendari'<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/breve descrizione del post type<\/span>\r\n                <span style=\"color: #0000ff;\">'public'<\/span>             <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #009900; font-weight: bold;\">true<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/se =true, viene visto sia da admin che in front-end<\/span>\r\n\t\t<span style=\"color: #0000ff;\">'exclude_from_search'<\/span> <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #009900; font-weight: bold;\">false<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/se =true gli elementi sono esclusi dalla ricerca front-end<\/span>\r\n\t\t<span style=\"color: #0000ff;\">'publicly_queryable'<\/span> <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #009900; font-weight: bold;\">true<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/indica se possono essere eseguite query lato front-end<\/span>\r\n\t\t<span style=\"color: #0000ff;\">'show_ui'<\/span>\t\t<span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #009900; font-weight: bold;\">true<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/se =false, in admin non sar\u00e0 mostrare l'interfaccia per la gestione del post type<\/span>\r\n\t\t<span style=\"color: #0000ff;\">'show_in_nav_menus'<\/span>\t <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #009900; font-weight: bold;\">true<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/indica se il post type pu\u00f2 essere inserito nel nav menu<\/span>\r\n\t\t<span style=\"color: #0000ff;\">'show_in_admin_bar'<\/span>\t <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #009900; font-weight: bold;\">true<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/se =false, il post type non viene mostrato nel menu superiore \"Nuovo\" dell'admin<\/span>\r\n\r\n\t\t<span style=\"color: #666666; font-style: italic;\">\/\/indica la posizione nei confronti degli altri elementi nel menu dell'admin.<\/span>\r\n\t\t<span style=\"color: #666666; font-style: italic;\">\/\/ 5 = sotto a Posts; 10 = a Media; 15 = a Links; 20 = a Pages; 25 = a Comments; 60 = al primo separatore;<\/span>\r\n\t\t<span style=\"color: #666666; font-style: italic;\">\/\/ 65 = a Plugins; 70 = a Users; 75 = a Tools; 80 = a Settings; 100 = al secondo separatore<\/span>\r\n\t\t<span style=\"color: #0000ff;\">'menu_position'<\/span>      <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #cc66cc;\">5<\/span><span style=\"color: #339933;\">,<\/span>\r\n\r\n\t\t<span style=\"color: #0000ff;\">'hierarchical'<\/span>       <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #009900; font-weight: bold;\">false<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/indica se il post type ha un genitore (in genere usato solo per le pagine)<\/span>\r\n\r\n\t\t<span style=\"color: #666666; font-style: italic;\">\/\/indica i valori del add_post_type_support() , ovvero quali elementi standard associare al post type<\/span>\r\n                <span style=\"color: #0000ff;\">'supports'<\/span>      <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #990000;\">array<\/span><span style=\"color: #009900;\">(<\/span>\r\n                                <span style=\"color: #0000ff;\">'title'<\/span><span style=\"color: #339933;\">,<\/span>\r\n                                <span style=\"color: #0000ff;\">'editor'<\/span><span style=\"color: #339933;\">,<\/span>\r\n                                <span style=\"color: #0000ff;\">'thumbnail'<\/span><span style=\"color: #339933;\">,<\/span>\r\n\t\t\t\t<span style=\"color: #0000ff;\">'excerpt'<\/span>\r\n                                <span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">,<\/span>\r\n\r\n\t\t<span style=\"color: #666666; font-style: italic;\">\/\/indica quali taxonomies associare al post type<\/span>\r\n\t\t<span style=\"color: #666666; font-style: italic;\">\/\/il seguente, per esempio, permette di inserire categorie a cui associare i post type<\/span>\r\n\t\t<span style=\"color: #666666; font-style: italic;\">\/\/in mancanza non sar\u00e0 possibile creare categorie di post<\/span>\r\n\t\t<span style=\"color: #0000ff;\">'taxonomies'<\/span>\t\t <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #990000;\">array<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">'category'<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">,<\/span>\r\n\r\n\t\t<span style=\"color: #0000ff;\">'has_archive'<\/span>        <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #009900; font-weight: bold;\">true<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/abilita la pagina di archivio per il post type<\/span>\r\n\r\n\t\t<span style=\"color: #666666; font-style: italic;\">\/\/permette di riscrivere alcuni parametri per il post type, che altrimenti sarebbero uguali a quelli standard<\/span>\r\n\t\t<span style=\"color: #666666; font-style: italic;\">\/\/<\/span>\r\n\t\t<span style=\"color: #0000ff;\">'rewrite'<\/span>            <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #990000;\">array<\/span><span style=\"color: #009900;\">(<\/span>\r\n\t\t\t\t\t<span style=\"color: #0000ff;\">'slug'<\/span> <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #0000ff;\">'calendari'<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/il post type \u00e8 raggiungibile all'indirizzo \"mio_sito.it\/calendari\"<\/span>\r\n\t\t\t\t\t<span style=\"color: #009900;\">)<\/span>\r\n    <span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n\t<span style=\"color: #666666; font-style: italic;\">\/\/registra l'elemento \"calendario\" come post type, con gli argomenti definiti sopra<\/span>\r\n\tregister_post_type<span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">'calendario'<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #000088;\">$args<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n<span style=\"color: #009900;\">}<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>La nostra funzione sar\u00e0 poi inizializzata con questa riga:<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"php\" style=\"font-family: monospace;\">add_action<span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">'init'<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #0000ff;\">'crea_calendari'<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Una volta attivato il plugin, nel menu laterale dell&#8217;admin <strong>avremo una nuova area: &#8220;Calendari Menu&#8221;<\/strong>. Da qui sar\u00e0 possibile visualizzare l&#8217;elenco dei calendari, aggiungere un nuovo calendario e associare a ognuno di essi una categoria da creare. Proprio come nei normali post.<\/p>\n<p><script type=\"text\/javascript\">\/\/ <![CDATA[\ngoogle_ad_client = \"ca-pub-9984963620559913\"; \/* Sir Bit - post singolo rettangolare *\/ google_ad_slot = \"5334366715\"; google_ad_width = 336; google_ad_height = 280;\n\/\/ ]]><\/script><br \/>\n<script type=\"text\/javascript\" src=\"http:\/\/pagead2.googlesyndication.com\/pagead\/show_ads.js\">\/\/ <![CDATA[\n\n\n\/\/ ]]><\/script><\/p>\n<h3 style=\"margin-top: 50px; margin-bottom: 20px; color: #c00;\">Visualizzare la pagina nel front-end : creare il link nel menu<\/h3>\n<p>A questo punto possiamo gestire tutto in lato amministrazione, ma in lato front-end non abbiamo ancora una struttura adatta. Infatti, dobbiamo manipolare il &#8220;single.php&#8221; e il &#8220;archive.php&#8221; perch\u00e9 visualizzino i nostri CPT e non i soliti post.<\/p>\n<p>Innanzitutto, dobbiamo creare un link per permettere all&#8217;utente di raggiungere la nostra area CPT, che <strong>nel nostro caso sar\u00e0 &#8220;mio_sito.it\/calendari&#8221;<\/strong>.<br \/>\nNell&#8217;admin entrate in &#8220;Aspetto =&gt; Menu&#8221;. Si presume che abbiate un&#8217;idea di dove ci troviamo e di come si gestiscono i menu in WordPress (se non \u00e8 cos\u00ec vi consiglio di provare a smanettare: \u00e8 piuttosto intuitivo; quest&#8217;area permette infatti di creare a piacere un menu di navigazione da mostrare in lato front-end).<br \/>\nNello spazio &#8220;link&#8221; a sinistra, aggiungete al vosto menu l&#8217;url &#8220;mio_sito.it\/calendari&#8221; e il nome &#8220;Calendari&#8221;. Ricordate di salvare le modifiche.<\/p>\n<h3 style=\"margin-top: 50px; margin-bottom: 20px; color: #c00;\">Single-calendario.php e Archive-calendario.php<\/h3>\n<p>Passiamo adesso a creare i nuovi file.<br \/>\nQuello che dobbiamo fare \u00e8 creare una nuova versione di &#8220;single.php&#8221; e &#8220;archive.php&#8221;, aggiungendo al loro nome il suffisso &#8220;-calendario&#8221; (in pratica creeremo &#8220;single-calendario.php&#8221; e &#8220;archive-calendario.php&#8221;).<\/p>\n<p>Nello zip troverete due file: <strong>&#8220;single-calendario.php&#8221; e &#8220;archive-calendario.php&#8221;<\/strong>. Non dovrete fare altro che copiarli nella cartella del vostro tema.<br \/>\nDa notare il suffisso di entrambi i file, &#8220;-calendario&#8221;, che \u00e8 lo stesso nome con cui abbiamo registrato il nostro CPT. In pratica, WordPress riconoscer\u00e0 automaticamente che questi due file sono rispettivamente il single e l&#8217;archive da usare per il nostro CPT.<\/p>\n<p>Come li ho creati?<br \/>\nSemplicemente, ho preso esattamente il <strong>contenuto di &#8220;single.php&#8221; e l&#8217;ho copiato in &#8220;single-calendario.php&#8221;<\/strong> (<em>nota<\/em>: nel mio caso faccio riferimento al tema &#8220;twentyfourteen&#8221; messo in dotazione durante l&#8217;installazione di WordPress: in base al tema che voi usate, il contenuto del single potrebbe variare leggermente).<br \/>\nDopodich\u00e9, ho aggiunto queste righe subito prima del ciclo che stampa gli articoli:<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3\r\n4\r\n5\r\n6<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"php\" style=\"font-family: monospace;\"><span style=\"color: #000088;\">$args<\/span> <span style=\"color: #339933;\">=<\/span> <span style=\"color: #990000;\">array<\/span><span style=\"color: #009900;\">(<\/span>      \r\n\t<span style=\"color: #0000ff;\">'post_type'<\/span> <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #0000ff;\">'calendario'<\/span><span style=\"color: #339933;\">,<\/span>\r\n\t<span style=\"color: #0000ff;\">'post__in'<\/span> <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #990000;\">array<\/span><span style=\"color: #009900;\">(<\/span>get_the_ID<span style=\"color: #009900;\">(<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">,<\/span> \r\n\t<span style=\"color: #0000ff;\">'posts_per_page'<\/span> <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #cc66cc;\">1<\/span>\r\n<span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\nquery_posts<span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$args<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>In pratica sto dicendo a WordPress: \u00abPrendi tutti gli articoli di tipo &#8220;calendario&#8221; e stampami solo quello con id del post attuale\u00bb.<br \/>\nQuesto perch\u00e9 ci troviamo all&#8217;interno di un articolo e quello che ci serve \u00e8 estrarre e stampare le informazioni di quell&#8217;articolo.<\/p>\n<p>Allo stesso modo, ho <strong>creato &#8220;archive-calendario.php&#8221; copiandolo da &#8220;archive.php&#8221;<\/strong> e aggiungendogli questa query iniziale:<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3\r\n4\r\n5<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"php\" style=\"font-family: monospace;\"><span style=\"color: #000088;\">$args<\/span> <span style=\"color: #339933;\">=<\/span> <span style=\"color: #990000;\">array<\/span><span style=\"color: #009900;\">(<\/span>      \r\n\t<span style=\"color: #0000ff;\">'post_type'<\/span> <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #0000ff;\">'calendario'<\/span><span style=\"color: #339933;\">,<\/span>\r\n\t<span style=\"color: #0000ff;\">'posts_per_page'<\/span> <span style=\"color: #339933;\">=&gt;<\/span> <span style=\"color: #cc66cc;\">10<\/span>\r\n<span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\nquery_posts<span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$args<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>In questo caso specifico a WordPress di prendere tutti gli articoli di tipo &#8220;calendario&#8221; e di stamparmi nella pagina solo i primi 10.<\/p>\n<h3 style=\"margin-top: 50px; margin-bottom: 20px; color: #c00;\">Note di chiarezza conclusive<\/h3>\n<p>Come abbiamo capito, la particolarit\u00e0 di WordPress \u00e8 che legger\u00e0 automaticamente la presenza di un nuovo &#8220;single-{nome_custom}.php&#8221; e &#8220;archive-{nome_custom}.php&#8221;, dove a {nome_custom} dobbiamo inserire il nome del nostro CPT.<\/p>\n<p>Entrando pi\u00f9 nello specifico, quando nel front-end cliccheremo <strong>sul link &#8220;mio_sito.php\/calendari&#8221; finiremo nella pagina di &#8220;archive-calendario.php&#8221;<\/strong>, che conterr\u00e0 l&#8217;elenco dei primi 10 articoli-calendario.<br \/>\nSe cliccherete su uno degli articoli, verrete indirizzati alla pagina &#8220;single-calendario.php&#8221;, che mostrer\u00e0 le informazioni del singolo articolo.<\/p>\n<p>Naturalmente il contenuto di &#8220;single-calendario.php&#8221; e &#8220;archive-calendario.php&#8221; potrete personalizzarlo a piacere, a seconda delle vostre competenze nell&#8217;uso del codice php e di WordPress.<\/p>\n<p>Per avere un&#8217;idea sul campo di cosa stiamo parlando, provate a creare alcuni articoli e vedete cosa accade quando visitere la pagina &#8220;mio_sito.php\/calendari&#8221;.<\/p>\n<div style=\"margin-top: 100px; margin-bottom: 20px;\"><strong><em>Fonti esterne<\/em><\/strong><\/div>\n<p><a title=\"I Post Type e i Custom Post Type sul codex ufficiale di WordPress\" href=\"http:\/\/codex.wordpress.org\/Post_Types\" target=\"_blank\">I Post Type e i Custom Post Type<\/a> sul codex ufficiale di WordPress<\/p>\n<p><a title=\"La funzione register_post_type\" href=\"http:\/\/codex.wordpress.org\/Function_Reference\/register_post_type\" target=\"_blank\">La funzione register_post_type<\/a> sul codex ufficiale di WordPress<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un esempio completo, con plugin e file scaricabili gratuitamente, per creare i Custom Post Type in Wordpress. Creeremo un&#8217;area per gestire articoli separati.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[79],"tags":[4,47,6,23],"class_list":["post-1993","post","type-post","status-publish","format-standard","hentry","category-wordpress-2","tag-php","tag-plugin","tag-script","tag-wordpress","cat-79-id"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/1993"}],"collection":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/comments?post=1993"}],"version-history":[{"count":5,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/1993\/revisions"}],"predecessor-version":[{"id":1998,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/1993\/revisions\/1998"}],"wp:attachment":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/media?parent=1993"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/categories?post=1993"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/tags?post=1993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}