Переключить административный обмен на основе выбранного шаблона страницы.

Я хотел бы, чтобы пользовательский интерфейс поля отображался только тогда, когда определенный шаблон был назначен на определенную страницу WordPress.

Есть идеи?

Solutions Collecting From Web of "Переключить административный обмен на основе выбранного шаблона страницы."

Лучший способ подойти к этой ситуации – через JavaScript. Таким образом, всякий раз, когда выбранное значение изменяется, вы можете мгновенно скрыть / показать связанный обмен.

Используйте wp_enqueue_script() в functions.php для загрузки пользовательского файла JavaScript в области администратора:

 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')); } 

Сам скрипт, который требует jQuery, просто скрывает или показывает метабокс на основе выбранного значения в раскрывающемся списке шаблона страницы. В этом примере я показываю метабокс для миниатюр сообщений, если выбран шаблон страницы по умолчанию:

 (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); 

И, просто для удовольствия, вот более короткая, менее подробная версия того же скрипта:

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

Вместо того, чтобы отображать метабокс, чтобы скрыть его с помощью jQuery, вы можете использовать это. Единственное отличие заключается в том, что скрытие / показ метабокса требует выбора «Обновить» после изменения раскрывающегося поля.

 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' ); 

Просто обновите строки 6 и 7 по желанию.