Custom post type: cos’è e come funziona in WordPress
Un custom post type (CPT) è un tipo di contenuto definito dall’utente che permette di organizzare informazioni specifiche separandole dagli articoli e dalle pagine standard di WordPress. Ogni CPT ha un proprio pannello di gestione, un archivio dedicato e metadati pensati per la natura del contenuto che ospita, dal catalogo prodotti al portfolio professionale.
Custom post type in sintesi
- Cos’è: un contenitore di contenuto personalizzato, distinto da post e pagine, pensato per dati con struttura specifica.
- A cosa serve: organizza prodotti, portfolio, eventi, recensioni o schede team senza mescolarli al blog.
- Come si crea: con un plugin no-code come Custom Post Type UI oppure con la funzione
register_post_type()nel codice. - Dove vive: nella stessa tabella del database
wp_postsdi post e pagine, distinto dal campopost_type. - Cosa richiede dopo la creazione: un template dedicato per la visualizzazione e l’aggiornamento dei permalink.
- Quando evitarlo: se il contenuto può essere gestito con categorie o tag sui post standard, un nuovo CPT è superfluo.

Che differenza c’è tra post, pagine e custom post type
I post sono contenuti dinamici, ordinati cronologicamente e organizzabili con categorie e tag; le pagine ospitano contenuti statici, senza data e senza tassonomie, pensati per sezioni fisse come “chi siamo” o “contatti”. Il custom post type introduce una terza via: un contenitore con etichette, campi e comportamento di visualizzazione su misura per uno specifico tipo di informazione.
Oltre a questi due tipi predefiniti, un’installazione di WordPress include di fatto sette tipologie di contenuto native: articoli, pagine, allegati multimediali, revisioni, voci dei menu di navigazione, CSS personalizzato e changeset del customizer. I custom post type si aggiungono a questo elenco senza sostituirlo, ampliando il sistema di gestione contenuti verso una vera e propria piattaforma CMS: per un inquadramento più ampio del concetto di sistema di gestione contenuti, può essere utile consultare la pagina dedicata al content management system e al suo funzionamento.
A livello di archiviazione, post, pagine e custom post type condividono la stessa struttura di database: la tabella wp_posts. A distinguerli è il valore della colonna post_type, che indica a WordPress quale insieme di regole, etichette e template applicare a quel contenuto. Questa unificazione tecnica è il motivo per cui un CPT può usare le stesse funzioni di query, revisione e pubblicazione dei post standard, pur comportandosi come un contenuto a sé stante su menu, URL e pannello di amministrazione.
Dal punto di vista pratico, la differenza più visibile per chi gestisce il sito è l’isolamento dei contenuti: un CPT “Portfolio” non compare nel feed del blog, non eredita le categorie degli articoli e non viene incluso negli archivi cronologici standard, a meno che non venga configurato esplicitamente per farlo.
Caratteristiche principali di un custom post type
Un custom post type configurato correttamente presenta alcune caratteristiche ricorrenti, indipendentemente dal tipo di contenuto che ospita. La prima è un pannello di controllo indipendente nel menu laterale della bacheca, separato dalla voce “Articoli”, con nome singolare e plurale personalizzato.
La seconda caratteristica è la gestione autonoma di URL e permalink: ogni CPT può avere una struttura di indirizzo propria, ad esempio nomesito.it/portfolio/progetto-esempio, distinta da quella degli articoli. A questa si affianca, quando il parametro has_archive è attivo, la generazione automatica di una pagina archivio che elenca tutti i contenuti di quel tipo, in modo analogo alla homepage del blog.
Il parametro supports determina quali componenti dell’editor sono disponibili: titolo, editor di testo, immagine in evidenza, campi personalizzati, estratto o revisioni possono essere abilitati o disattivati a seconda della natura del contenuto. Un catalogo prodotti, ad esempio, può fare a meno dell’estratto ma avere bisogno di campi personalizzati per prezzo e disponibilità.
Un ulteriore attributo tecnico è show_in_rest: se impostato su vero, il CPT diventa accessibile tramite le API REST di WordPress e compatibile con l’editor a blocchi e con applicazioni esterne che leggono i dati via API. Infine, il parametro hierarchical stabilisce se il CPT può avere relazioni padre-figlio tra i contenuti, come avviene per le pagine, oppure se ogni voce è indipendente, come i post.
Questi attributi vanno pianificati prima della creazione, perché modificarli in un secondo momento, soprattutto lo slug o la struttura gerarchica, può generare incoerenze tra contenuti già pubblicati e nuove impostazioni.

Perché usare i custom post type
Il motivo principale per adottare un custom post type è mantenere separata la struttura dei contenuti quando il sito gestisce informazioni di natura diversa dal blog: un sito che pubblica articoli e, contemporaneamente, cataloga immobili o prodotti, trae beneficio dal tenere questi due flussi editoriali distinti, sia per la gestione interna sia per la navigazione dell’utente.
Un secondo vantaggio riguarda i metadati su misura: un CPT “Eventi” può avere campi per data, luogo e prezzo del biglietto, mentre un CPT “Recensioni” può includere un punteggio e un autore citato, elementi che non avrebbe senso aggiungere a ogni articolo del blog. Questa precisione nei dati facilita anche un’organizzazione più coerente dei contenuti dal punto di vista dell’architettura dell’informazione del sito, argomento approfondito nella pagina dedicata all’architettura dell’informazione e alla sua progettazione.
Un terzo vantaggio è tecnico: isolando un tipo di contenuto, è possibile applicare template, query e regole di visualizzazione specifiche senza interferire con il comportamento di post e pagine già esistenti. Questo riduce il rischio di conflitti quando il sito cresce o quando vengono aggiunte nuove funzionalità.
Se il contenuto può stare in una categoria: evita un nuovo CPT
Non ogni esigenza di organizzazione richiede un custom post type. Se la differenza tra i contenuti riguarda solo l’argomento e non la struttura dei dati, una categoria o un tag applicati ai post standard risolvono il problema senza aumentare la complessità del sito. Il CPT ha senso quando il contenuto richiede campi propri, un archivio separato o un modello di visualizzazione diverso da quello del blog: in assenza di queste condizioni, introdurre un nuovo tipo di contenuto appesantisce inutilmente la gestione e, nel caso di creazione via plugin, il peso del sito stesso.
Casi d’uso comuni dei custom post type
I custom post type trovano applicazione ogni volta che un sito deve gestire un insieme di contenuti con struttura ripetibile ma diversa da quella di un articolo di blog. Gli scenari più frequenti riguardano quattro ambiti principali.
- Portfolio
- Un CPT dedicato raccoglie progetti, case study o lavori realizzati, ciascuno con immagine, descrizione e categoria di competenza, senza mescolarsi agli articoli del blog.
- Catalogo prodotti o cataloghi tecnici
- Schede prodotto, annunci immobiliari o inventari veicoli vengono gestiti con campi dedicati a prezzo, disponibilità e specifiche tecniche; i plugin di e-commerce registrano automaticamente un CPT di questo tipo per gestire le schede acquistabili.
- Directory e schede persona
- Membri del team, relatori di un evento o testimonianze di clienti vengono organizzati come voci singole, ciascuna con foto, ruolo e contenuto descrittivo proprio.
- Eventi e recensioni
- Un CPT “Eventi” gestisce data, luogo e orario in campi strutturati; un CPT “Recensioni” associa un punteggio e un autore a ciascun contenuto valutato.
In molti di questi casi non è necessario creare il CPT da zero: alcuni plugin specializzati registrano già un proprio tipo di contenuto dedicato al momento dell’installazione, ad esempio per la gestione di prodotti in un negozio online o per il calendario di un sito di eventi. Prima di costruire un CPT personalizzato conviene verificare se un plugin già in uso sul sito ne offre uno equivalente, per evitare duplicazioni di funzionalità.
La scelta tra queste applicazioni dipende dalla quantità di contenuti da gestire: per poche decine di voci, una categoria sui post standard può bastare; superata questa soglia, la separazione in un CPT dedicato semplifica sia la manutenzione sia la visualizzazione per l’utente finale, perché consente archivi, filtri e template pensati su misura per quel tipo di informazione.
Come creare un custom post type
Un custom post type si crea in due modi: tramite un plugin con interfaccia grafica, senza scrivere codice, oppure inserendo una funzione nel file del tema o di un plugin personalizzato. La scelta dipende dalla familiarità con il codice e dalle esigenze di manutenzione del sito nel tempo.
| Criterio | Plugin grafico | Codice (register_post_type) |
|---|---|---|
| Competenze richieste | Nessuna conoscenza di PHP necessaria | Conoscenza base di PHP e dei file del tema |
| Velocità di configurazione | Immediata tramite moduli guidati | Richiede scrittura e test del codice |
| Impatto sulle prestazioni | Aggiunge un plugin attivo, con possibile sovraccarico se non ottimizzato | Nessun plugin aggiuntivo, impatto minimo |
| Portabilità | Legata all’attivazione del plugin | Il codice resta nel tema o in un plugin dedicato, portabile tra installazioni |
| Adatto a | Chi gestisce il sito senza supporto tecnico continuativo | Progetti con manutenzione tecnica regolare |
Se preferisci non scrivere codice: crea il CPT con un plugin
- Installa e attiva un plugin dedicato alla registrazione di tipi di contenuto, disponibile nella libreria ufficiale dei plugin WordPress.
- Apri la sezione del plugin dedicata all’aggiunta o modifica dei post type nel menu laterale della bacheca.
- Definisci lo slug del post type: deve essere in minuscolo, alfanumerico, senza spazi e inferiore a venti caratteri, perché viene usato negli URL e nelle query interne.
- Inserisci i nomi plurale e singolare che appariranno nel menu di amministrazione.
- Completa automaticamente le etichette aggiuntive dell’interfaccia tramite la funzione di popolamento offerta dal plugin.
- Salva il nuovo post type: comparirà immediatamente come voce indipendente nel menu di WordPress.
- Aggiorna i permalink da Impostazioni > Permalink per evitare errori 404 sui nuovi contenuti.
Alcuni plugin dedicati permettono inoltre di abbinare campi personalizzati al CPT appena creato, per aggiungere dati strutturati come prezzo, data o posizione geografica a ciascun contenuto: questo aspetto è trattato nel dettaglio nella pagina su custom field, cosa sono e come si creano.
Strumenti equivalenti offrono un percorso simile basato su moduli guidati invece che su codice, con la possibilità di gestire anche il controllo degli accessi utente ai contenuti del nuovo tipo.
Creazione di un custom post type via codice
La creazione via codice utilizza la funzione nativa register_post_type(), inserita all’interno di un plugin personalizzato o nel file functions.php del tema, agganciata all’evento init del ciclo di vita di WordPress. Questo metodo evita di aggiungere un plugin aggiuntivo al sito e mantiene il controllo completo sui parametri del tipo di contenuto.
La funzione richiede due argomenti: il nome del post type, in forma di stringa minuscola e alfanumerica, e un array di configurazione che definisce etichette, visibilità, supporto per archivio e funzionalità dell’editor.
labels- Insieme di etichette testuali mostrate nell’interfaccia di amministrazione, come nome singolare, plurale e voci di menu.
public- Stabilisce se il tipo di contenuto è visibile sul frontend del sito e interrogabile pubblicamente.
has_archive- Abilita la generazione automatica di una pagina archivio per i contenuti di quel tipo.
supports- Elenco delle funzionalità dell’editor attive: titolo, contenuto, immagine in evidenza, campi personalizzati, revisioni.
hierarchical- Determina se il tipo di contenuto può avere relazioni padre-figlio come le pagine.
show_in_rest- Rende il tipo di contenuto accessibile tramite le API REST e compatibile con l’editor a blocchi.
Dopo aver salvato il codice, è necessario aggiornare i permalink da Impostazioni > Permalink: senza questo passaggio, le pagine singole e l’archivio del nuovo tipo di contenuto restituiscono un errore 404 anche se la registrazione del CPT è corretta.
Se gestisci il sito senza supporto tecnico continuo: valuta il plugin invece del codice
Il codice resta la soluzione più solida nel tempo perché non dipende dall’aggiornamento di un plugin esterno, ma richiede la possibilità di modificare file del tema o di mantenere un plugin personalizzato. Se il sito non ha una manutenzione tecnica regolare, un errore di sintassi nel file functions.php può bloccare l’intero sito: in questo scenario, un plugin con interfaccia grafica riduce il rischio operativo, a costo di un carico aggiuntivo sulle prestazioni.
Tassonomie personalizzate collegate al custom post type
Una tassonomia è il sistema che classifica e raggruppa i contenuti di un custom post type, in modo analogo a come categorie e tag classificano i post standard. Si crea con la funzione register_taxonomy(), specificando l’etichetta, lo slug per l’URL e il tipo di contenuto a cui è collegata.
Le tassonomie si dividono in due categorie di comportamento: quelle gerarchiche, che ammettono relazioni padre-figlio come le categorie di un blog, e quelle non gerarchiche, pensate per etichette libere simili ai tag. La scelta dipende dalla natura della classificazione: un genere cinematografico o una provincia geografica si presta a una struttura gerarchica, mentre parole chiave descrittive funzionano meglio come tassonomia piatta.
Le tassonomie personalizzate si collegano al CPT tramite il secondo parametro della funzione di registrazione, che accetta il nome del post type o un elenco di più tipi di contenuto condivisi. Questo permette, ad esempio, di usare la stessa tassonomia “Regione” sia su un CPT “Ristoranti” sia su un CPT “Eventi”, mantenendo coerente la classificazione geografica tra i due.
Un elemento distinto dalla tassonomia, ma spesso associato allo stesso CPT, è il campo personalizzato: mentre la tassonomia classifica e raggruppa, il campo personalizzato memorizza un dato specifico di quel singolo contenuto, come un prezzo o una data. L’aggiunta di un meta box per inserire questi campi nell’editor del CPT è un passaggio distinto dalla registrazione del tipo di contenuto e dalla tassonomia. Per una trattazione specifica di questo aspetto, la pagina su custom field, a cosa servono e come si creano approfondisce definizione, utilizzo e creazione nei principali software.
Strumenti no-code dedicati alla registrazione dei CPT includono spesso anche la gestione delle tassonomie nella stessa interfaccia, evitando di dover scrivere due funzioni separate per contenuto e classificazione.
Template e permalink di un custom post type
Dopo la registrazione, un custom post type non ha automaticamente un aspetto grafico dedicato: WordPress segue la gerarchia dei template del tema e, in assenza di un file specifico, ricade sul template generico index.php, con una resa grafica spesso poco adeguata al contenuto.
Per visualizzare correttamente le voci singole si crea un file nominato single-{post_type}.php, sostituendo al segnaposto lo slug esatto del tipo di contenuto; per la pagina che elenca tutte le voci si crea un file archive-{post_type}.php. Questi file risiedono nella cartella principale del tema attivo e permettono di controllare in modo indipendente layout, campi mostrati e struttura della pagina.
Uno degli errori più frequenti dopo la creazione di un CPT riguarda proprio i permalink: finché non si visitano Impostazioni > Permalink e si salva nuovamente la struttura, le pagine singole e l’archivio del nuovo tipo di contenuto restituiscono un errore 404, anche se la registrazione via codice o plugin è corretta. Questo passaggio rigenera le regole di riscrittura degli URL necessarie al funzionamento del nuovo tipo di contenuto.
Se usi un page builder per il template: verifica il supporto al tipo di contenuto
Quando la visualizzazione del CPT viene costruita con un editor visuale invece che con file di template tradizionali, è necessario che il tipo di contenuto sia reso disponibile all’editor stesso tramite il parametro di supporto all’interfaccia a blocchi o alle API REST. In assenza di questa impostazione, l’editor visuale non riconosce il nuovo tipo di contenuto come modificabile graficamente, anche se il CPT risulta correttamente registrato nel database.
Errori frequenti e buone pratiche nella gestione dei CPT
La maggior parte dei problemi riscontrati dopo la creazione di un custom post type deriva da tre cause ricorrenti: permalink non aggiornati, template mancante e pianificazione insufficiente della struttura dei dati.
Il contenuto “mancante” sul frontend, pur essendo presente e pubblicato nel pannello di amministrazione, nasce quasi sempre da un parametro public impostato su falso o da un errore nei permalink: verificare entrambe le impostazioni risolve la maggior parte dei casi. Un errore di template, invece, si manifesta con una resa grafica generica o con contenuti che non si posizionano correttamente nella pagina: la causa è quasi sempre un nome di file di template non corrispondente esattamente allo slug del post type.
Sul piano della pianificazione, conviene definire in anticipo quali campi, tassonomie e relazioni servono al contenuto prima di registrare il CPT, perché modificare lo slug o la struttura gerarchica dopo la pubblicazione di contenuti reali può generare incoerenze tra i dati già salvati e le nuove impostazioni. È preferibile anche scegliere etichette descrittive invece che generiche: un nome come “Scheda progetto” comunica immediatamente la funzione del contenuto, mentre un’etichetta generica come “Elemento” richiede una spiegazione aggiuntiva a chi gestisce il sito.
Infine, prima di registrare un nuovo CPT, è utile verificare se un plugin già installato sul sito, dedicato a una funzione specifica come l’e-commerce o la gestione di eventi, non ne registri già uno equivalente: evitare duplicazioni riduce il rischio di conflitti tra tipi di contenuto con funzione simile.
Domande frequenti sui custom post type
Che cos’è un custom post type?
È un tipo di contenuto definito dall’utente in WordPress, distinto da post e pagine, pensato per gestire informazioni con una struttura propria, come prodotti, eventi o schede di portfolio, ciascuno con pannello, template e metadati dedicati.
Qual è la differenza tra post e custom post type?
Il post è il contenuto dinamico predefinito, ordinato cronologicamente e organizzato con categorie e tag; il custom post type è un contenitore separato, con etichette e campi su misura, pensato per dati diversi da quelli di un articolo di blog.
Come si crea un custom post type?
Si crea tramite un plugin con interfaccia grafica, senza scrivere codice, oppure inserendo la funzione register_post_type() nel file del tema o in un plugin personalizzato, aggiornando poi i permalink per evitare errori 404.
A cosa serve una tassonomia personalizzata su un CPT?
Serve a classificare e raggruppare i contenuti di un custom post type, in modo gerarchico o non gerarchico, con la funzione register_taxonomy(), collegata al tipo di contenuto tramite il relativo parametro di registrazione.
Che differenza c’è tra custom post type e custom field?
Il custom post type definisce il contenitore del contenuto, mentre il custom field memorizza un dato specifico di un singolo contenuto, come un prezzo o una data. L’approfondimento su definizione e creazione è disponibile nella pagina dedicata ai custom field.
Quando conviene creare un custom post type invece di usare categorie?
Conviene quando il contenuto richiede campi propri, un archivio separato o un template di visualizzazione diverso dal blog; se basta distinguere l’argomento, una categoria o un tag sui post standard sono sufficienti e più semplici da gestire.
Perché un custom post type restituisce errore 404 dopo la creazione?
Nella maggior parte dei casi perché i permalink non sono stati aggiornati: è necessario visitare Impostazioni > Permalink e salvare nuovamente la struttura per rigenerare le regole di riscrittura degli URL del nuovo tipo di contenuto.