Per ottenere le funzionalità di base di un tipo di post personalizzato funzionante, non abbiamo quasi alcun codice da inserire. Prima di iniziare, hai almeno bisogno di alcune cose: un nome, due etichette e definire se il tuo tipo di post sarà pubblico (probabilmente lo vorrai).
Quando crei tipi di post personalizzati, devi aggiungere il tuo codice a un file plug-in. Sebbene sia possibile farlo tramite il functions.php
file in un tema, non è corretto farlo.
Impostiamo il nostro tipo di post Super Post.
add_action( 'init', 'create_my_post_types' );
function create_my_post_types() {
register_post_type( 'super_post',
array(
'labels' => array(
'name' => __( 'Super Post' ),
'singular_name' => __( 'Super Post' )
),
'public' => true,
)
);
}
Noterai che non c’è molto da fare lì. Abbiamo aggiunto due parametri: un nome del tipo di post e un array di argomenti. Tutti i possibili argomenti sono dettagliati nella sezione successiva.
Se tutto ciò che vorrai fare è qualcosa di semplice come avere un campo del titolo e un’area di testo del contenuto, puoi saltare la parte successiva di questo tutorial.
Creazione di tipi di post personalizzati (in dettaglio)
Nella sezione di base sopra, abbiamo utilizzato due argomenti per creare il nostro tipo di post personalizzato. Tuttavia, la register_post_type()
funzione ha ben più di 20 argomenti che puoi usare. Ti dà molto controllo sulle specifiche del tuo tipo di post senza troppi problemi. Puoi combinarli e abbinarli in tutti i modi che non riesco nemmeno ad avvicinarmi a coprire in questo tutorial.
Di seguito, descriverò ciascuno degli argomenti disponibili per l’uso. Ogni sezione avrà un esempio di come aggiungere l’argomento all’array degli argomenti.
Labels
Le labels
sono una matrice di stringhe che rappresenta il tipo di post nell’amministratore. Ogni stringa è un po’ di testo mostrato per una particolare funzione nell’amministratore. Per impostazione predefinita, i tipi di post non gerarchici avranno il testo con “post” al loro interno e i tipi di post gerarchici avranno il testo con “pagina” al loro interno.
È particolarmente importante rendere queste stringhe traducibili se stai creando un plug-in per uso pubblico.
Questo elenco è un insieme di esempi generali di quando viene utilizzata ciascuna stringa. Tuttavia, ciascuno può essere utilizzato in più posizioni nell’amministratore.
name
: La forma plurale del nome del tuo tipo di post.singular_name
: La forma singolare del nome del tuo tipo di post.add_new
: la voce di menu per aggiungere un nuovo post.add_new_item
: L’intestazione mostrata durante la creazione di un nuovo post.edit
: la voce di menu per la modifica dei post.edit_item
: l’intestazione mostrata durante la modifica di un post.new_item
: visualizzato nel menu dei preferiti nell’intestazione dell’amministratore.view
: utilizzato come testo in un collegamento per visualizzare il post.view_item
: mostrato accanto al permalink nella schermata di modifica del post.search_items
: testo del pulsante per la casella di ricerca nella schermata di modifica dei post.not_found
: testo da visualizzare quando non vengono trovati post tramite la ricerca nell’amministratore.not_found_in_trash
: testo da visualizzare quando non ci sono post nel cestino.parent
: utilizzato come etichetta per un post principale nella schermata di modifica dei post. Utile solo per i tipi di post gerarchici.
add_action('init', 'super_post_cpt');
function super_post_cpt() {
$labels = array(
'name' => __( 'Super Post' ),
'singular_name' => __( 'Super Post' ),
'add_new' => __( 'Add New' ),
'add_new_item' => __( 'Add New Super Post' ),
'edit' => __( 'Edit' ),
'edit_item' => __( 'Edit Super Post' ),
'new_item' => __( 'New Super Post' ),
'view' => __( 'View Super Post' ),
'view_item' => __( 'View Super Post' ),
'search_items' => __( 'Search Super Posts' ),
'not_found' => __( 'No super posts found' ),
'not_found_in_trash' => __( 'No super posts found in Trash' ),
'parent' => __( 'Parent Super Post' ),
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'taxonomies' => array('supertype'),
'rewrite' => array('slug' => 'super-post', 'with_front' => false),
//Adding custom rewrite tag
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => true,
'menu_position' => null,
'supports' => array('title', 'thumbnail', 'excerpt','editor','page-attributes'),
);
register_post_type('super_post', $args);
}