{"id":677,"date":"2026-10-14T10:00:00","date_gmt":"2026-10-14T08:00:00","guid":{"rendered":"https:\/\/aarkly.com\/?p=677"},"modified":"2026-07-21T13:09:35","modified_gmt":"2026-07-21T11:09:35","slug":"wordpress-custom-post-types-creation","status":"publish","type":"post","link":"https:\/\/aarkly.com\/it\/wordpress-custom-post-types-creation\/","title":{"rendered":"WordPress Custom Post Types: Guida alla Creazione"},"content":{"rendered":"<h2 class=\"wp-block-heading\">Cosa sono i Custom Post Types<\/h2>\n\n<p class=\"wp-block-paragraph\">I Custom Post Types (CPT) permettono di estendere WordPress oltre i post standard e le pagine. Con i CPT puoi creare tipi di contenuto specifici come portfolio, prodotti, eventi, testimonianze, o qualsiasi altro tipo di dato strutturato. Ogni CPT ha il proprio pannello di amministrazione, permalink, archivi, e tassonomie, fornendo un&#8217;esperienza di gestione contenuti su misura.<\/p>\n\n<h2 class=\"wp-block-heading\">Registrare un CPT con register_post_type<\/h2>\n\n<p class=\"wp-block-paragraph\">La funzione register_post_type() si chiama nell&#8217;hook init. I parametri principali sono labels (nome singolare\/plurale), public (visibile nell&#8217;admin), has_archive (archivio frontend), supports (title, editor, thumbnail, excerpt), menu_icon (Dashicon o SVG), e rewrite (slug permalink). Esempio: register_post_type(&#8216;product&#8217;, array(&#8216;labels&#8217; => array(&#8216;name&#8217; => &#8216;Prodotti&#8217;), &#8216;public&#8217; => true, &#8216;has_archive&#8217; => true)).<\/p>\n\n<h2 class=\"wp-block-heading\">Labels e Interfaccia Amministrativa<\/h2>\n\n<p class=\"wp-block-paragraph\">Le labels personalizzano l&#8217;interfaccia admin per il CPT: name (nome plurale), singular_name, add_new_item, edit_item, view_item, search_items, not_found. labels &#8216;all_items&#8217;, &#8216;menu_name&#8217; controllano la navigazione. Labels ben scritte rendono l&#8217;esperienza admin professionale e intuitiva per i clienti. Usa _x() per contestualizzare le traduzioni.<\/p>\n\n<h2 class=\"wp-block-heading\">Supporti e Features<\/h2>\n\n<p class=\"wp-block-paragraph\">Il parametro &#8216;supports&#8217; abilita le features standard: title, editor, thumbnail (immagine in evidenza), excerpt, author, trackbacks, custom-fields, comments, revisions, page-attributes (ordine e gerarchia). Per CPT gerarchici (come pagine), imposta &#8216;hierarchical&#8217; => true. I CPT possono anche supportare blocchi Gutenberg abilitando &#8216;show_in_rest&#8217; => true.<\/p>\n\n<h2 class=\"wp-block-heading\">Tassonomie per CPT<\/h2>\n\n<p class=\"wp-block-paragraph\">I CPT supportano tassonomie integrate (category, post_tag) e personalizzate. Usa register_taxonomy() per creare tassonomie come &#8216;brand&#8217; o &#8216;genre&#8217;. Collega al CPT con &#8216;taxonomies&#8217; => array(&#8216;brand&#8217;). Le tassonomie possono essere gerarchiche (come categorie) o non gerarchiche (come tag). La relazione many-to-many tra CPT e tassonomie permette categorizzazione flessibile.<\/p>\n\n<h2 class=\"wp-block-heading\">Meta Box e Custom Fields<\/h2>\n\n<p class=\"wp-block-paragraph\">I CPT spesso richiedono campi aggiuntivi. add_meta_box() crea meta box personalizzati nell&#8217;editor. I dati si salvano con l&#8217;hook save_post. Per CPT complessi, framework come CMB2, ACF (Advanced Custom Fields), o Meta Box semplificano la creazione di interfacce ricche con campi di vario tipo: text, WYSIWYG, image, gallery, repeater, relationship. <\/p>\n\n<h2 class=\"wp-block-heading\">REST API e Gutenberg<\/h2>\n\n<p class=\"wp-block-paragraph\">Imposta &#8216;show_in_rest&#8217; => true per esporre il CPT tramite REST API (\/wp\/v2\/products). Questo abilita l&#8217;editor Gutenberg e permette integrazioni headless. I meta field personalizzati vanno registrati nel REST API con register_meta(). Per CPT con molti dati, considera la risposta REST personalizzata per includere campi meta e tassonomie annidate.<\/p>\n\n<h2 class=\"wp-block-heading\">Permalink e Rewrite Rules<\/h2>\n\n<p class=\"wp-block-paragraph\">Il parametro &#8216;rewrite&#8217; controlla gli URL del CPT: &#8216;slug&#8217; => &#8216;products&#8217; per permalink personalizzati, &#8216;with_front&#8217; => false per evitare prefissi. Dopo aver registrato un CPT, visita Settings > Permalinks e salva per flushare le rewrite rules. Per CPT condivisi in plugin, flusha le regole all&#8217;attivazione con register_activation_hook() per non appesantire ogni richiesta.<\/p>\n\n<h2 class=\"wp-block-heading\">Conclusione<\/h2>\n\n<p class=\"wp-block-paragraph\">I Custom Post Types sono la base per trasformare WordPress in un CMS versatile. Permettono di modellare qualsiasi tipo di contenuto con interfacce su misura, tassonomie dedicate, e campi personalizzati. Con il supporto REST API e Gutenberg, i CPT moderni sono pronti per architetture headless e block editing. Padroneggiare i CPT \u00e8 essenziale per sviluppo WordPress professionale.<\/p>","protected":false},"excerpt":{"rendered":"<p>Cosa sono i Custom Post Types I Custom Post Types (CPT) permettono di estendere WordPress oltre i post standard e le pagine. Con i CPT puoi creare tipi di contenuto specifici come portfolio, prodotti, eventi, testimonianze, o qualsiasi altro tipo di dato strutturato. Ogni CPT ha il proprio pannello di amministrazione, permalink, archivi, e tassonomie, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1100,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ai_primary_source":"","visibility_scope":"","ai_summary":"","ai_intent":"","ai_related_resources":"","ai_priority":0,"ai_entity_type":"","ai_is_based_on":"","ai_citations":"","ai_mentions":"","ai_speakable_selector":"","ai_chunk_hints":"","footnotes":""},"categories":[6],"tags":[50,47,45],"ai_visibility":[],"class_list":["post-677","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress","tag-content-management","tag-php-development","tag-wordpress-development"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":7}},"_links":{"self":[{"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/posts\/677","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/comments?post=677"}],"version-history":[{"count":1,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/posts\/677\/revisions"}],"predecessor-version":[{"id":892,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/posts\/677\/revisions\/892"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/media\/1100"}],"wp:attachment":[{"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/media?parent=677"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/categories?post=677"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/tags?post=677"},{"taxonomy":"ai_visibility","embeddable":true,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/ai_visibility?post=677"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}