Come aggiungere add_meta_box a uno specifico Template di Pagina?
Voglio aggiungere add_meta_box a uno specifico tipo di pagina come un Template di Pagina, ad esempio un Template Prodotto.
Sto utilizzando questo articolo http://wp.smashingmagazine.com/2011/10/04/create-custom-post-meta-boxes-wordpress/ come riferimento.

Se il nome del tuo template di pagina personalizzato è foobar.php
, puoi usare get_post_meta()
:
global $post;
if ( 'foobar.php' == get_post_meta( $post->ID, '_wp_page_template', true ) ) {
// La pagina corrente ha assegnato il template foobar
// fai qualcosa
}
Personalmente, mi piace chiamare questo all'interno della mia callback add_meta_boxes_page
, e racchiuderlo attorno alla chiamata stessa di add_meta_box()
.
function wpse82477_add_meta_boxes_page() {
global $post;
if ( 'foobar.php' == get_post_meta( $post->ID, '_wp_page_template', true ) ) {
add_meta_box( $args );
}
}
add_action( 'add_meta_boxes_page', 'wpse82477_add_meta_boxes_page' );
Dovrai solo istruire gli utenti a salvare la pagina dopo aver assegnato il template, in modo che appaia il meta box.

Grazie mille, un problema qui per informare l'utente di salvare la pagina una volta. Comunque mi ha fatto risparmiare un sacco di tempo. Grazie CHIP

Ho trovato alcuni bug con l'opzione di risposta sopra, ma ho personalizzato questa opzione qui sotto e ha aiutato - nessun bug.
add_action('add_meta_boxes', 'add_product_meta');
function add_product_meta()
{
global $post;
if(!empty($post))
{
$pageTemplate = get_post_meta($post->ID, '_wp_page_template', true);
if($pageTemplate == 'page-templates/product-page.php' )
{
add_meta_box(
'product_meta', // $id
'Informazioni Prodotto', // $title
'display_product_information', // $callback
'page', // $page
'normal', // $context
'high'); // $priority
}
}
}
function display_product_information()
{
// Aggiungi l'HTML per i meta del post
}
https://paulund.co.uk/display-post-meta-box-specific-page-templates
È pulito

Questa è una soluzione con il nome della pagina:
Accueil è il nome della pagina.
$screens = ['Accueil'];
foreach ($screens as $screen) {
if ( get_the_title() == $screen ) {//condizione
add_meta_box(
'accueil_données',
'Informazioni sull\'Orchestra',
'metabox_accueil_infos',
'page',
'normal',
'high'
);
}
}

function mcf_add_custom_metabox() {
global $post;
if ( $_REQUEST['post'] == 30 ) {
add_meta_box( 'shop_editor', ' ', 'mcf_callback', 'page' );
}
}
add_action( 'add_meta_boxes_page', 'mcf_add_custom_metabox' );
Ho trovato un modo per aggiungere metabox in una pagina specifica utilizzando l'ID della pagina.
