Cosa sono i Custom Post Type (CPT) ?
I CPT sono dei tipi di post, WordPress di default ne ha 2 e sono le pagine e gli articoli, ma possiamo aggiungerne quanti ne vogliamo, i custom post type estendo le funzionalità di WordPress permettendoci di aggiungere nuove funzioni, per esempio un archiviazione di titoli di CD, vediamo subito come fare.
Prima di tutto scriviamo il codice necessario a creare il CPT.
Il codice sottostante va inserito nel file functions.php del vostra template, anche se in realtà potete creare un plugin per WP.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
function cd_custom_post() { // creo e registro il custom post type register_post_type( 'cd', /* nome del custom post type */ // definisco le varie etichette da mostrare nei menù array('labels' => array( 'name' => 'CD', /* nome, al plurale, dell'etichetta del post type. */ 'singular_name' => 'CD', /* nome, al singolare, dell'etichetta del post type. */ 'all_items' => 'Tutti i CD', /* testo nei menu che indica tutti i contenuti del post type */ 'add_new' => 'Aggiungi nuovo', /*testo del pulsante Aggiungi. */ 'add_new_item' => 'Aggiungi nuovo cd', /* testo per il pulsante Aggiungi nuovo post type */ 'edit_item' => 'Modifica CD', /* testo modifica */ 'new_item' => 'Nuovo CD', /* testo nuovo oggetto */ 'view_item' => 'Visualizza CD', /* testo per visualizzare */ 'search_items' => 'Cerca CD', /* testo per la ricerca*/ 'not_found' => 'Nessun CD trovato', /* testo se non trova nulla */ 'not_found_in_trash' => 'Nessun CD trovato nel cestino', /* testo se non trova nulla nel cestino */ 'parent_item_colon' => '' ), /* fine dell'array delle etichette del menu */ 'description' => 'Raccolta di CD 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 */ 'query_var' => true, 'menu_position' => 8, /* definisce l'ordine in cui comparire nel menù di amministrazione a sinistra */ 'menu_icon' => get_stylesheet_directory_uri() . '/img/mia-icona.png', /* imposta l'icona da usare nel menù per il posty type */ 'rewrite' => array( 'slug' => 'cd', 'with_front' => false ), /* specificare uno slug per leURL */ 'has_archive' => true, /* definisci se abilitare la generazione di un archivio (tipo archive-cd.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 */ } // Inizializzo la funzione add_action( 'init', 'cd_custom_post'); |
Alla riga 26 abbiamo la stringa che definisce l’icona da visualizzare, nell’esempio ho utilizzato un’icona personalizzata ma è possibile utilizzare anche una delle dashicons di WordPress, si trovano a questo indirizzo https://developer.wordpress.org/resource/dashicons/
E’ sufficiente modificare la stringa in questo modo
1 |
'menu_icon' => 'dashicons-download', |
L’immagine dell’icona consiglio di farla di 20×20 px.
Come mostrare i post di un custom post type di WordPress
Bene, abbiamo creato la parte relativa al back end, ora possiamo al front end in modo da mostrare i post inseriti.
Adesso all’interno del nostro template (funziona anche su un tema child) creiamo un file che chiamiamo cd.php (il nome del file deve essere quello del custom post type) e ci incolliamo il codice sottostante.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php /* Template Name: CD */ ?> <?php get_header(); ?> <?php // Loop CD $custom_query_args = array( 'post_type' => 'cd', 'posts_per_page' => 1, 'orderby' => 'menu_order', 'order' => 'ASC', ); $custom_query = new WP_Query( $custom_query_args ); ?> <?php if ( $custom_query->have_posts() ) : while ( $custom_query->have_posts() ) : $custom_query->the_post(); ?> <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>> <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <?php the_post_thumbnail(); ?> <?php the_excerpt();?> </article> <?php endwhile; endif; wp_reset_postdata(); ?> <?php get_sidebar(); ?> <?php get_footer(); ?> |
Ora creiamo una nuova pagina di WordPress ed assegnamo il template appena creato.
Ora creiamo una voce di menu che richiama la pagina Libreria CD ed a front end vedremo il contenuto dei CPT, fico no ? 🙂
Come aggiungere le categorie ad un CPT (Custom Post Type) WordPress
Di default i custom post type non hanno il supporto per la categorizzazione, nel caso in cui volessimo aggiungerlo possiamo farlo in questo modo
1 2 3 4 5 |
//* Add categories support for CPT add_action( 'init', 'category_cd' ); function category_cd() { register_taxonomy_for_object_type( 'category', 'cd' ); } |
Programmatore WordPress Esperto WooCommerce
Sono l’autore di questo blog con tanti trucchi e guide su WordPress e WooCommerce.
Ciao. Grazie per l’articolo, ma ho un problema.
Ho inserito il tuo codice in function.php (modificando da CD a promo).
Nel back-end tutto bene.
Si vede pure l’anteprima nella pagina Promozioni (che richiama i post). Ma quando entro nella pagina della singola promozione mi da errore 404.
Ho creato anche promo.php (ma con o senza non cambia nulla).
Hai idea del perché?
https://www.thedesignables.com/PROVE_CLIENTI/centerchrome/promozioni/
Grazie
Come ti mando qualche screenshot?
Ciao Matteo,
posta il codice che hai messo nel functions.php
Forse è meglio così: https://codeshare.io/29YEl7
Usa questo https://codeshare.io/29YEl7
Perfetto, grazie. Ora funziona. Cosa avevo sbagliato?
Così per la prossima volta sono a posto.
In una funzione PHP non puoi passare caratteri maiuscoli o –