Iniziamo dalla soluzione 😎
function aeroporti_custom_post() {
// creo e registro il custom post type
register_post_type( 'aeroporto', /* nome del custom post type */
// definisco le varie etichette da mostrare nei menù
array('labels' =>
array(
'name' => 'aeroporti', /* nome, al plurale, dell'etichetta del post type. */
'singular_name' => 'aeroporto', /* nome, al singolare, dell'etichetta del post type. */
'all_items' => 'Tutti gli aeroporti', /* testo nei menu che indica tutti i contenuti del post type */
'add_new' => 'Aggiungi nuovo', /*testo del pulsante Aggiungi. */
'add_new_item' => 'Aggiungi nuovo aeroporto', /* testo per il pulsante Aggiungi nuovo post type */
'edit_item' => 'Modifica aeroporto', /* testo modifica */
'new_item' => 'Nuovo aeroporto', /* testo nuovo oggetto */
'view_item' => 'Visualizza aeroporto', /* testo per visualizzare */
'search_items' => 'Cerca aeroporto', /* testo per la ricerca*/
'not_found' => 'Nessun aeroporto trovato', /* testo se non trova nulla */
'not_found_in_trash' => 'Nessun aeroporto trovato nel cestino', /* testo se non trova nulla nel cestino */
'parent_item_colon' => ''
), /* fine dell'array delle etichette del menu */
'description' => 'Lista aeroporti', /* 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' => 'aeroporti', 'with_front' => false ), /* specificare uno slug per leURL */
'has_archive' => true, /* definisci se abilitare la generazione di un archivio (tipo archive-aeroporto.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', 'aeroporti_custom_post');
Cosa sono i Custom Post Type (CPT) ?
i custom post type o meglio definiti CPT sono dei tipi di post, vengono storicizzati nella classica tabella wp_posts; di default WORDPRESS ne ha 2 le pagine e gli articoli, ma grazie alla funzione sopra elencata ne possiamo aggiungere a nostro piacimento a seconda del progetto da realizzare.
Dove va inserito il codice sopra riportato, che serve alla creazione di un Custom Post Type in WordPress ?
Il codice inserito nel file functions.php del nostro template, o io consiglio sempre di creare un plugin per WordPress e includere il nostro script al suo interno per separare la logica dal tema.
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:
add_action( 'init', 'category_aeroporto' );
function category_aeroporto() {
register_taxonomy_for_object_type( 'category', 'aeroporto' );
}
e ora per mostrarli ai nostri utenti ?
Bene, abbiamo creato la parte relativa al back end, una volta che abbiamo inserito i nostri aeroporti, possiamo passare al front end in modo da mostrare i post inseriti.
Adesso all’interno del nostro tema creiamo un file che chiamiamo aeroporto.php (il nome del file deve essere quello del custom post type) e ci incolliamo il codice sottostante.
Come mostrare i post di un custom post type di WordPress
<?php
/*
Template Name: aeroporto
*/
?>
<?php get_header(); ?>
<?php
// Loop aeroporti
$custom_query_args = array(
'post_type' => 'aeroporto',
'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(); ?>
Se pensate di non riuscire a realizzare queste modifiche o avete bisogno di fare altre personalizzazioni potete contattarmi per una consulenza, se la mole di lavoro è tanta possiamo concordare insieme una formula per un Contratto di assistenza e manutenzione sito web, per il periodo necessario a soddisfare tutte le vostre richieste.