Chciałbym, aby niestandardowy interfejs pola był wyświetlany tylko wtedy, gdy określony szablon jest przypisany do konkretnej strony WordPress.
Jakieś pomysły?
Chciałbym, aby niestandardowy interfejs pola był wyświetlany tylko wtedy, gdy określony szablon jest przypisany do konkretnej strony WordPress.
Jakieś pomysły?
Odpowiedzi:
Najlepszym sposobem podejścia do tej sytuacji jest JavaScript. W ten sposób, za każdym razem, gdy zmienia się wybrana wartość, możesz natychmiast ukryć / pokazać powiązany metaboks.
Użyj wp_enqueue_script()
w, functions.php
aby załadować niestandardowy plik JavaScript w obszarze administracyjnym:
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'));
}
Sam skrypt, który wymaga jQuery, po prostu ukrywa lub pokazuje metaboks na podstawie wybranej wartości z listy rozwijanej szablonu strony. W tym przykładzie pokazuję metaboks dla miniatur postów tylko w przypadku wybrania domyślnego szablonu strony:
(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);
I, dla zabawy, oto krótsza, mniej szczegółowa wersja tego samego skryptu:
(function($){
$(function() {
$('#page_template').change(function() {
$('#postimagediv').toggle($(this).val() == 'default');
}).change();
});
})(jQuery);
Zamiast renderować metaboks tylko w celu ukrycia go za pomocą jQuery, możesz tego użyć. Jedyna różnica polega na tym, że ukrywanie / wyświetlanie metaboksu wymaga wybrania opcji „Aktualizuj” po zmianie pola rozwijanego.
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' );
Po prostu zaktualizuj linie 6 i 7 według potrzeb.