Я хотів би, щоб користувальницький інтерфейс поля відображався лише тоді, коли певному шаблону призначено певну сторінку WordPress.
Будь-які ідеї?
Я хотів би, щоб користувальницький інтерфейс поля відображався лише тоді, коли певному шаблону призначено певну сторінку WordPress.
Будь-які ідеї?
Відповіді:
Найкращий спосіб підійти до цієї ситуації - через 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 за бажанням.