Me gustaría tener una interfaz de campo personalizada que se muestre solo cuando se asigne una plantilla determinada a una página particular de WordPress.
¿Algunas ideas?
Me gustaría tener una interfaz de campo personalizada que se muestre solo cuando se asigne una plantilla determinada a una página particular de WordPress.
¿Algunas ideas?
Respuestas:
La mejor manera de abordar esta situación es a través de JavaScript. De esa manera, cada vez que cambie el valor seleccionado, puede ocultar / mostrar instantáneamente el metabox relacionado.
Utilizar wp_enqueue_script()
en functions.php
cargar un archivo JavaScript personalizada 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 la plantilla de página. En este ejemplo, solo estoy mostrando el metabox para miniaturas de publicaciones 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 representar el metabox solo para ocultarlo con jQuery, puede usar esto. La única diferencia es que ocultar / mostrar el 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' );
Simplemente actualice las líneas 6 y 7 según lo desee.