¿Cómo agregar add_meta_box a una Plantilla de Página específica?

21 ene 2013, 14:59:35
Vistas: 32.9K
Votos: 5

Quiero agregar add_meta_box a un tipo de página específico como una Plantilla de Página, por ejemplo una Plantilla de Producto.

Estoy usando este artículo http://wp.smashingmagazine.com/2011/10/04/create-custom-post-meta-boxes-wordpress/ como referencia.

0
Todas las respuestas a la pregunta 4
2
10

Si el nombre de tu archivo de plantilla personalizada es foobar.php, puedes usar get_post_meta():

global $post;
if ( 'foobar.php' == get_post_meta( $post->ID, '_wp_page_template', true ) ) {
    // La página actual tiene asignada la plantilla foobar
    // hacer algo
}

Personalmente, me gusta llamar esto dentro de mi callback add_meta_boxes_page, y envolverlo alrededor de la llamada add_meta_box() misma.

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' );

Solo necesitarás indicar a los usuarios que guarden la página después de asignar la plantilla, para que aparezca el meta box.

21 ene 2013 15:17:47
Comentarios

Muchas gracias, un problema aquí para informar al usuario que guarde la página una vez. Por cierto, me ahorró mucho tiempo. Gracias CHIP

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

Gracias por la solución. No recordaba si add_meta_boxes era demasiado temprano para esto. Podría sugerir usar if( 'foobar.php' == get_page_template_slug( $post->ID )) en lugar de usar directamente la meta-key.

Jer Jer
25 jul 2017 19:45:36
0

Encontré algunos errores con la opción de respuesta anterior, pero personalicé esta opción de abajo y funcionó - sin errores en absoluto.

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
                'Información del Producto', // $title
                'display_product_information', // $callback
                'page', // $page
                'normal', // $context
                'high'); // $priority
        }
    }
}

function display_product_information()
{
    // Añadir el HTML para los metadatos del post
}

https://paulund.co.uk/display-post-meta-box-specific-page-templates

Está limpio

13 sept 2016 08:30:42
0

Esta es una solución con el nombre de la página:

Accueil es el nombre de la página.

    $screens = ['Accueil'];
    foreach ($screens as $screen) {
     if ( get_the_title() == $screen ) {//condición
     add_meta_box(
      'accueil_données',
      'Información sobre Orquesta',
      'metabox_accueil_infos',
      'page',
      'normal',
      'high'
     );
   }
}
     
18 abr 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' );

Encontré una forma de agregar metaboxes en una página específica usando el ID de la página.

15 dic 2016 08:17:52
Comentarios

Por favor, [edita] tu respuesta y agrega una explicación: ¿por qué eso podría resolver el problema?

fuxia fuxia
15 dic 2016 09:26:30

Codificar valores directamente nunca es una buena idea. ;)

dhuyvetter dhuyvetter
5 jun 2017 10:46:15