Cosa sono e come creare custom post type, i tipi di contenuto in WordPress

Data: 15 Agosto 2023 Tempo di lettura: 17 minuti
Argomenti:

Un custom post type in WordPress è un tipo di contenuto personalizzato che ti permette di aggiungere e gestire dati specifici sul tuo sito, separati dai post e pagine standard. È simile a un post normale, ma può avere caratteristiche extra e un template di presentazione specifico. Alcuni dei post type di default di WordPress sono, ad esempio, articoli (post), pagine (page) o allegati (attachment). Un custom post type può rappresentare invece Libri, Cantanti, Film, Prodotti o qualunque altra cosa si possa astrarre.

Capire cos’è un custom post type e come gestirli è fondamentale nella creazione di siti WordPress e, più nello specifico, di temi WordPress. Il primo step è ragionare sui tipi di contenuto che un determinato sito web deve andare a gestire e quali informazioni raccogliere.

L’articolo che stai leggendo entra un po’ nel tecnico, ti spiego cos’è un custom post type, come creare un custom post type da aggiungere al tuo template WordPress con relativo codice e come aggiungere tassonomie (come categorie o tag) per raggruppare determinati tipi di contenuto in archivi in modo che sia tutto organizzato e pulito.

Potrebbe interessarti: richiedi un’analisi gratuita del tuo sito web

Cos’è un custom post type WordPress e a cosa serve

Vediamo cos’è un custom post type (CPT) in WordPress: è un tipo di contenuto personalizzato che puoi creare e gestire sul tuo sito web, oltre ai post e pagine standard già disponibili in WordPress. I CPT offrono una struttura di organizzazione più flessibile per i tuoi contenuti, permettendoti di separare e gestire facilmente diversi tipi di contenuti sul tuo sito. Sono il cuore pulsante della creazione di siti WordPress e, più precisamente, dei template, dato che ogni tema – più o meno specifico che sia – porta con se tipi di contenuto differenti.

Qualunque tipo di contenuto in WordPress avere con se dati e informazioni che vengono definiti meta dati o, più semplicemente, meta. Questi possono essere:

  • titolo
  • contenuto del post (the content)
  • autore
  • riassunto
  • immagine in evidenza (featured image)
  • data di pubblicazione

I sopra citati meta sono comuni un po’ a tutti i post type di WordPress, siano di default o custom. Nel creare un custom post type, va da sé che quel tipo di contenuto possa avere associati i più diversi tipi di dati e informazioni (meta) a definirlo. Basti pensare agli esempi fatti all’inizio dell’articolo: i dati che descrivono un libro sono diversi da quelli di un cantante, un film, un servizio o quanto altro ancora.

Esempi di custom post type

Prima di dirti come creare un custom post type vediamo alcuni esempi per aiutarti a capire meglio cos’è un custom post type, essendo il mattone primo su cui si fonda il nostro amato CMS. La logica di base di WordPress è qui. Ecco qualche esempio di custom post type WordPress con relativi meta a definirlo (esclusi quelli comuni a tutti, ndr):

  • Libro: autore, copertina, data di pubblicazione, casa editrice, genere
  • Cantanti: data di nascita, discografia, biografia, contatti
  • Film: data di uscita, regista, genere
  • Prodotti (simil WooCommerce): prezzo, prezzo scontato, foto del prodotto, scorte in magazzino

Come creare un custom post type personalizzato

Creare un custom post type da aggiungere al tuo tema WordPress è abbastanza semplice, se sai dove mettere le mani. Nello specifico devi includere il seguente frammento di codice nel file functions.php del template. Il mio è solo un esempio, modificalo come meglio si adatta alla tua situazione. Il codice è comprensivo di commenti così che tu sappia cosa e come modificare un custom post type.

Per andare poi ad arricchire le informazioni di ciascun tipo di contenuto creato puoi aggiungere campi personalizzati in facilità con il plugin ACF – Advanced Custom Fields. È gratis e svolge il compito alla perfezione. Non è argomento di questo articolo ma ti consiglio di darci un occhio.

Per approfondire: 9 plugin WordPress che devi usare per forza

<?php
register_post_type('film', // nome del custom post type
    // definisco le varie etichette da mostrare nei menù
    array('labels' => array(
        'name' => 'Film', // nome, al plurale, dell'etichetta del post type.
        'singular_name' => 'Film', // nome, al singolare, dell'etichetta del post type.
        'all_items' => 'Tutti i Film', // testo nei menu che indica tutti i contenuti del post type
        'add_new' => 'Aggiungi nuovo', // testo del pulsante Aggiungi.
        'add_new_item' => 'Aggiungi nuovo Film', // testo per il pulsante Aggiungi nuovo post type
        'edit_item' => 'Modifica Film', // testo modifica
        'new_item' => 'Nuovo Film', // testo nuovo oggetto
        'view_item' => 'Visualizza Film', // testo per visualizzare
        'search_items' => 'Cerca Film', // testo per la ricerca
        'not_found' => 'Nessun Film trovato', // testo se non trova nulla
        'not_found_in_trash' => 'Nessun Film trovato nel cestino', // testo se non trova nulla nel cestino
        'parent_item_colon' => ''
        ), // fine dell'array delle etichette del menu 
        'description' => 'Raccolta di Film del portale', // descrizione del post type
        'public' => true, // definisce se il post type sia visibile sia da front-end che da back-end
        'publicly_queryable' => true, // definisce se possono essere fatte query da front-end
        'exclude_from_search' => false, // esclude (false) il post type dai risultati di ricerca
        'show_ui' => true, // definisce se deve essere visualizzata l'interfaccia di default nel pannello di amministrazione
        'show_in_rest' => true,
        'query_var' => true,
        'menu_position' => 5, // definisce l'ordine in cui comparire nel menù di amministrazione a sinistra
        'menu_icon' => 'dashicons-format-video', // imposta l'icona da usare nel menù per il post type
        'rewrite' => array('slug' => 'film', 'with_front' => false), // specificare uno slug per le URL
        'has_archive' => true, // definisci se abilitare la generazione di un archivio (tipo archive-film.php)
        'capability_type' => 'post', // definisci se si comporterà come un post o come una pagina
        'hierarchical' => false, // definisci se potranno essere definiti elementi padri di altri
        // la riga successiva definisce quali elementi verranno visualizzati nella schermata di creazione del post
        'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'sticky')
    ) // fine delle opzioni
); // fine della registrazione

Tassonomie (categorie e tag) in WordPress

Tra le varie informazioni (meta) che possono descrivere uno o più post type in WordPress ci sono le tassonomie, come tag e categorie per quanto riguarda – ad esempio – gli articoli di un blog.

Una tassonomia in WordPress è un modo per raggruppare post e contenuti personalizzati in base a determinate caratteristiche comuni, normalmente indicate come argomento o parola chiave. Categorie e tag sono esempi di tassonomie predefinite in WordPress. Per capire meglio cosa sono le tassonomie a livello concettuale ti consiglio di leggere l’articolo qui di seguito, così da entrare nel merito proprio di categorie e tag (tassonomie che potrebbero benissimo accumunare anche custom post type diversi).

Per approfondire: che differenza c’è tra categorie e tag in WordPress?

Come creare una tassonomia personalizzata per custom post type

Proseguo con l’esempio di prima. Visto come creare un post type, ora andiamo a creare una tassonomia (custom taxonomy) da associare al nostro CPT Film. La tassonomia sarà categoria-film. Analogamente a quanto fatto prima, aggiungi il codice nel file functions.php del tuo tema WordPress o eventuale (e sempre caldamente consigliato per non dire obbligatorio) child theme.

// Creiamo la nostra funzione che definirà la tassonomia personalizzata
function taxonomy__categoria_film() {

    // Definiamo il nome della nostra tassonomia personalizzata
    $taxonomy = 'categoria-film';

    // Definiamo a quale tipo di post sarà associata la tassonomia
    $object_type = 'film';

    // Creiamo un array di etichette per la nostra tassonomia personalizzata
    $labels = array(
        'name'               => 'Categoria Film',  // nome, al plurale, dell'etichetta della tassonomia.
        'singular_name'      => 'Categoria Film',  // nome, al singolare, dell'etichetta della tassonomia.
        'search_items'       => 'Cerca Categoria Film',  // testo per la ricerca
        'all_items'          => 'Tutte le categorie Film',  // testo nel menu che indica tutte le tassonomie
        'parent_item'        => 'Categoria Padre',  // testo per l'elemento padre
        'parent_item_colon'  => 'Categoria Padre:',  // testo per l'elemento padre con due punti
        'update_item'        => 'Aggiorna Categoria Film',  // testo per l'aggiornamento
        'edit_item'          => 'Modifica Categoria Film',  // testo per la modifica
        'add_new_item'       => 'Aggiungi Categoria Film',  // testo per aggiungere nuovo elemento
        'new_item_name'      => 'Nuovo nome Categoria Film',  // testo per il nuovo nome dell'elemento
        'menu_name'          => 'Categoria Film'  // nome nel menu di amministrazione
    );

    // Creiamo un array di argomenti per la nostra tassonomia personalizzata
    $args = array(
        'labels'            => $labels,  // inseriamo le etichette che abbiamo definito sopra
        'hierarchical'      => true,  // definisce se la tassonomia sarà gerarchica (come le categorie) o non gerarchica (come i tag)
        'show_in_rest'      => true,  // definisce se la tassonomia deve essere visibile nella REST API
        'show_ui'           => true,  // definisce se deve essere visualizzata l'interfaccia nel pannello di amministrazione
        'show_in_nav_menus' => true,  // definisce se deve essere visibile nei menu di navigazione
        'public'            => true,  // definisce se la tassonomia è pubblica e può essere utilizzata dai visitatori/front-end del sito
        'show_admin_column' => true,  // definisce se deve essere visibile una colonna nel pannello di amministrazione
        'query_var'         => true,  // definisce se può essere utilizzata nelle query di WordPress
        'rewrite'           => array('slug' => 'categoria-film')  // definisce lo slug per le URL
    );

    // Questa funzione registra la nostra tassonomia personalizzata con WordPress
    register_taxonomy($taxonomy, $object_type, $args);
}

// Questa azione assicura che la funzione venga eseguita durante l'inizializzazione di WordPress
add_action('init','taxonomy__categoria_film');

Conclusioni

Ed eccoci giunti alla fine. Spero questo articolo ti sia di aiuto per capire cos’è un custom post type e come usare i tipi di contenuto personalizzati per creare un sito WordPress flessibile, scalabile e capace di fittare alla perfezione alle tue esigenze. Puoi arricchire i post type gratis con il plugin ACF – Advanced Custom Field o, più semplicemente, se devi farti assistere da un consulente WordPress per al creazione o il restyling di un sito web, hai conoscenze molto utili per descrivere il tuo progetto in modo più preciso.