Activar / desactivar metabox de administración según la plantilla de página elegida

16

Me gustaría que una interfaz de campo personalizada se muestre solo cuando se asigna una plantilla determinada a una página de WordPress particular.

¿Alguna idea?

    
pregunta Jonathan Wold 24.05.2011 - 17:03

2 respuestas

21

La mejor manera de abordar esta situación es a través de JavaScript. De esa manera, siempre que cambie el valor seleccionado, puede ocultar / mostrar instantáneamente el metabox relacionado.

Use wp_enqueue_script() en functions.php para cargar un archivo JavaScript personalizado en el área de administración:

add_action('admin_enqueue_scripts', 'my_admin_script');
function my_admin_script()
{
    wp_enqueue_script('my-admin', get_bloginfo('template_url').'/my-admin.js', array('jquery'));
}

El script en sí, que requiere jQuery, simplemente oculta o muestra un metabox basado en el valor seleccionado en la lista desplegable de plantillas de página. En este ejemplo, solo muestro el metabox para publicar miniaturas en caso de que se seleccione la plantilla de página predeterminada:

(function($){
$(document).ready(function() {

    var $page_template = $('#page_template')
        ,$metabox = $('#postimagediv'); // For example

    $page_template.change(function() {
        if ($(this).val() == 'default') {
            $metabox.show();
        } else {
            $metabox.hide();
        }
    }).change();

});
})(jQuery);

Y, solo por diversión, aquí hay una versión más corta y menos detallada del mismo script:

(function($){
$(function() {

    $('#page_template').change(function() {
        $('#postimagediv').toggle($(this).val() == 'default');
    }).change();

});
})(jQuery);
    
respondido por el Geert 24.05.2011 - 19:41
1

En lugar de mostrar el metabox solo para ocultarlo con jQuery, puedes usar esto. La única diferencia es que la ocultación / visualización del metabox requiere seleccionar "Actualizar" después de cambiar el campo desplegable.

function add_meta_box() {
    global $post;
    if(!empty($post)) {
        $pageTemplate = get_post_meta($post->ID, '_wp_page_template', true);

        if($pageTemplate == 'your-page-template-here.php' ) {
            add_meta_box( $id, $title, $callback, 'page', $context, $priority, $callback_args );
        }
    }
}
add_action( 'add_meta_boxes', 'add_meta_box' );

Solo actualiza las líneas 6 y 7 como desees.

    
respondido por el davidcondrey 07.12.2014 - 22:47

Lea otras preguntas en las etiquetas