Come creare un custom post type in WordPress
In questo articolo vedremo come definire un custom post type all’interno della tua installazione WordPress.
Questa funzionalità, introdotta dalla versione 3.0 di WordPress, permette di aggiungere ed organizzare nuovi tipi di contenuto personalizzati, simili agli articoli oppure alle pagine che già utilizzi normalmente ma completamente separate nella gestione, tramite un’area dedicata all’interno dell’amministrazione di WordPress.
Uno degli utilizzi tipici di un post personalizzato è quello di aggiungere un’area servizi oppure un’area testimonianze.
In questo articolo vedremo come aggiungere un nuovo tipo di post personalizzato, senza l’ausilio di plugin esterni ma realizzando un plugin dedicato.
Come definire un nuovo post personalizzato
Puoi aggiungere un nuovo custom post type è necessario utilizzare la funzione register_post_type(), vediamola insieme.
register_post_type( 'servizi', array( 'labels' => array( 'name' => esc_html__('Servizi' , 'wip-plugin'), 'singular_name' => esc_html__('Servizio' , 'wip-plugin'), 'add_new' => esc_html__('Aggiungi servizio', 'wip-plugin'), 'add_new_item' => esc_html__('Aggiungi nuovo servizio' , 'wip-plugin'), 'edit_item' => esc_html__('Modifica servizio', 'wip-plugin'), 'new_item' => esc_html__('Nuovo servizio', 'wip-plugin'), 'all_items' => esc_html__('Tutti i servizi', 'wip-plugin'), 'view_item' => esc_html__('Visualizza servizio' , 'wip-plugin'), 'search_items' => esc_html__('Cerca servizio' , 'wip-plugin'), 'not_found' => esc_html__('Servizio non trovato', 'wip-plugin'), 'not_found_in_trash' => esc_html__('Servizio non trovato nel cestino', 'wip-plugin'), ), 'public' => true, 'rewrite' => array('slug' => 'servizio'), 'menu_position' => 9, 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'page-attributes' ), ) );
Nella sezione labels sono stati impostati i nomi di ogni etichetta presente nell’amministrazione WordPress mentre nella sezione args puoi definire le caratteristiche del nostro CPT, la posizione all’interno del menu WordPress, un’eventuale icona da visualizzare nel menu WordPress e le funzionalità supportate, come l’editor, l’immagine in evidenza, il riassunto oppure il titolo.
Ad esempio, se desideri non utilizzare l’immagine in evidenza, puoi rimuovere thumbnail dall’array supports.
Se adesso torni in WordPress troverai una nuova sezione, subito dopo gli Articoli.
Come aggiungere il supporto alle tassonomie
Se lo desideri, puoi organizzare i post personalizzati aggiungendo il supporto alle tassonomie di WordPress.
Questo permette di raggruppare ogni servizio secondo determinate caratteristiche, ad esempio utilizzare una tassonomia per tutti i servizi dedicati alle aziende ed una tassonomia differente per i servizi che vengono offerti ai privati.
Molto probabilmente già utilizzi le tassonomie ogni volta che crei un nuovo articolo in WordPress, impostando una determinata categoria, le categorie di WordPress infatti sono una tassonomia presente di default nel CMS.
Per aggiungere una nuova tassonomia, puoi utilizzare la funzione register_taxonomy()
register_taxonomy( 'servizi-category', array('servizi'), array( 'hierarchical' => true, 'label' => esc_html__('Categorie servizi' , 'wip-plugin'), 'rewrite' => array( 'slug' =>'servizi-category', 'hierarchical' => true ) ) );
Il primo parametro impostato è il nome della tassonomia, ovvero servizi-category, al suo posto puoi utilizzare un nome differente mentre il secondo parametro serve per definire a quale custom post type collegare la tassonomia, in questo caso servizi.
Successivamente, con rewrite, puoi impostare anche il supporto ai permalink, ti consiglio di definire questo parametro, molto importante lato SEO poiché permette di riscrivere i permalink generati dalla tassonomia.
Si tratta di un corso completo per lo sviluppo di temi e plugin per WordPress, seguendo tutti gli standard di codifica di WordPress.org.Acquista il corso o scarica gratuitamente un estratto
Conclusione
Di seguito il codice completo utilizzato, se hai domande oppure dubbi lascia un commento all’articolo.
/* ------------------------------------------------------------------------- * * DEFINIAMO IL CUSTOM POST TYPE /* ------------------------------------------------------------------------- */ if (!function_exists('wip_add_cpt')) { function wip_add_cpt() { register_post_type( 'servizi', array( 'labels' => array( 'name' => esc_html__('Servizi' , 'wip-plugin'), 'singular_name' => esc_html__('Servizio' , 'wip-plugin'), 'add_new' => esc_html__('Aggiungi servizio', 'wip-plugin'), 'add_new_item' => esc_html__('Aggiungi nuovo servizio' , 'wip-plugin'), 'edit_item' => esc_html__('Modifica servizio', 'wip-plugin'), 'new_item' => esc_html__('Nuovo servizio', 'wip-plugin'), 'all_items' => esc_html__('Tutti i servizi', 'wip-plugin'), 'view_item' => esc_html__('Visualizza servizio' , 'wip-plugin'), 'search_items' => esc_html__('Cerca servizio' , 'wip-plugin'), 'not_found' => esc_html__('Servizio non trovato', 'wip-plugin'), 'not_found_in_trash' => esc_html__('Servizio non trovato nel cestino', 'wip-plugin'), ), 'public' => true, 'rewrite' => array('slug' => 'servizio'), 'menu_position' => 9, 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'page-attributes' ), ) ); register_taxonomy( 'servizi-category', array('servizi'), array( 'hierarchical' => true, 'label' => esc_html__('Categorie servizi' , 'wip-plugin'), 'rewrite' => array( 'slug' =>'servizi-category', 'hierarchical' => true ) ) ); } add_action('init', 'wip_add_cpt'); }