Aggiungere campi personalizzati quando vengono selezionati template specifici
Sto cercando di modificare un sito dove l'infrastruttura attuale non è ottimale, poiché è stata costruita sul precedente sito piuttosto che da zero.
Ho una sezione del sito che necessita dei propri campi personalizzati. Questa sezione non giustifica un proprio custom post type, e dato lo stato del sito sarebbe estremamente poco pratico farlo in questo modo. Ciò che non voglio, per comodità dell'utente, è costringerlo a usare i campi personalizzati poiché risulta piuttosto disordinato.
Quindi, come posso aggiungere campi (come si farebbe per un custom post type) quando viene selezionato un certo template?

Riesci a farlo? Assolutamente sì! Devi semplicemente interrogare il valore della meta chiave _wp_page_template
dell'oggetto $post
e agire di conseguenza. Qualcosa come questo:
// Globalizza $post
global $post;
// Ottieni i meta del template della pagina
$page_template = get_post_meta( $post->ID, '_wp_page_template', true );
// Se la pagina corrente utilizza il nostro specifico
// template, allora mostra i nostri meta personalizzati
if ( 'template-foobar.php' == $page_template ) {
// Inserisci qui il tuo codice per i meta personalizzati
}
Ora, ti consiglierei di utilizzare una meta box personalizzata, piuttosto che campi personalizzati.
Sebbene l'implementazione completa delle meta box personalizzate sia leggermente fuori dall'ambito della tua domanda, la risposta di base rimane la stessa. Cercherò comunque di indirizzarti nella giusta direzione. Dovrai utilizzare una combinazione di add_meta_box()
, chiamata in un callback agganciato a add_meta_boxes-{hook}
, un callback per definire la metabox e un callback per validare/pulire e salvare i meta personalizzati.
function wpse70958_add_meta_boxes( $post ) {
// Ottieni i meta del template della pagina
$page_template = get_post_meta( $post->ID, '_wp_page_template', true );
// Se la pagina corrente utilizza il nostro specifico
// template, allora mostra la nostra meta box personalizzata
if ( 'template-foobar.php' == $page_template ) {
add_meta_box(
'wpse70958-custom-metabox', // ID HTML della metabox
'Meta Speciali', // Titolo della metabox
'wpse70598_page_template_metabox', // nome del callback
'page', // tipo di post
'side', // contesto (advanced, normal, or side)
'default', // priorità (high, core, default or low)
);
}
}
// Assicurati di usare "_" invece di "-"
add_action( 'add_meta_boxes_page', 'wpse70958_add_meta_boxes' );
function wpse70598_page_template_metabox() {
// Definisci qui i campi del form della meta box
}
function wpse70958_save_custom_post_meta() {
// Pulisci/valida i meta qui, prima di chiamare update_post_meta()
}
add_action( 'publish_page', 'wpse70958_save_custom_post_meta' );
add_action( 'draft_page', 'wpse70958_save_custom_post_meta' );
add_action( 'future_page', 'wpse70958_save_custom_post_meta' );
Modifica
Potrebbe essere meglio racchiudere l'intera chiamata add_meta_box()
nel condizionale.

Fantastico! Questa risposta ha superato completamente qualsiasi aspettativa avessi. Grazie, sei una leggenda!

Ha funzionato alla perfezione... Vorrei votare o selezionare come risposta, ma mi sono appena unito a questa sezione di Stack Exchange, quindi spero che i miei ringraziamenti qui siano sufficienti ;)
