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?
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?
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);
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.
Lea otras preguntas en las etiquetas wp-admin conditional-tags