Come aggiungere add_meta_box a uno specifico Template di Pagina?

21 gen 2013, 14:59:35
Visualizzazioni: 32.9K
Voti: 5

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.

0
Tutte le risposte alla domanda 4
2
10

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.

21 gen 2013 15:17:47
Commenti

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

Ajay Patel Ajay Patel
21 gen 2013 15:25:01

Grazie per la soluzione. Non ricordavo se add_meta_boxes fosse troppo presto per questo. Potrei suggerire di usare if( 'foobar.php' == get_page_template_slug( $post->ID )) invece di usare direttamente la meta-key.

Jer Jer
25 lug 2017 19:45:36
0

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

13 set 2016 08:30:42
0

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'
     );
   }
}
     
18 apr 2018 23:46:26
2
-1
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.

15 dic 2016 08:17:52
Commenti

Per favore [modifica] la tua risposta e aggiungi una spiegazione: perché potrebbe risolvere il problema?

fuxia fuxia
15 dic 2016 09:26:30

Il codice hardcoded non è mai una buona idea. ;)

dhuyvetter dhuyvetter
5 giu 2017 10:46:15