Vorrei che fosse visualizzata un'interfaccia di campo personalizzata solo quando un determinato modello è assegnato a una determinata pagina di WordPress.
Qualche idea?
Vorrei che fosse visualizzata un'interfaccia di campo personalizzata solo quando un determinato modello è assegnato a una determinata pagina di WordPress.
Qualche idea?
Risposte:
Il modo migliore per affrontare questa situazione è tramite JavaScript. In questo modo, ogni volta che il valore selezionato cambia, puoi nascondere / mostrare istantaneamente il relativo metabox.
Utilizzare wp_enqueue_script()
in functions.php
per caricare un file JavaScript personalizzato nell'area di amministrazione:
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'));
}
Lo script stesso, che richiede jQuery, nasconde o mostra semplicemente un metabox basato sul valore selezionato nell'elenco a discesa del modello di pagina. In questo esempio, sto solo mostrando il metabox per le miniature dei post nel caso in cui sia selezionato il modello di pagina predefinito:
(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);
E, solo per divertimento, ecco una versione più breve, meno dettagliata dello stesso script:
(function($){
$(function() {
$('#page_template').change(function() {
$('#postimagediv').toggle($(this).val() == 'default');
}).change();
});
})(jQuery);
Invece di rendere il metabox solo per nasconderlo con jQuery puoi usarlo. L'unica differenza è che il nascondere / mostrare il metabox richiede di selezionare "Aggiorna" dopo aver modificato il campo a discesa.
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' );
Basta aggiornare le righe 6 e 7 come desiderato.