Увімкніть метабокс адміністратора на основі обраного шаблону сторінки


18

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

Будь-які ідеї?


Якщо це не потрібно "жити" (тобто для зміни шаблону сторінки не потрібно, щоб метабокс з'являвся / зникав негайно), перегляньте це пов'язане питання: wordpress.stackexchange.com/questions/48611/…
Стівен Харріс

@StephenHarris Дякую за коментар. Я завершив роботу з класом WPAlchemy MetaBox, який включає в себе налаштування "за шаблоном".
Джонатан Уолд

Відповіді:


22

Найкращий спосіб підійти до цієї ситуації - через 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);

Нічого, дякую! Я незабаром даю це тест і відповім про це відповідно.
Джонатан Уолд

Так дивовижно ... це саме те, що мені було потрібно. Працював ідеально для мене. Дякую!!!
Росс

Вибачте, але я справжній початківець у JavaScript, і я знаю, що там є те, що мені потрібно, але, здається, я не в змозі робити все правильно, тому я не впевнений, що розумію, що Я повинен змінити файл JavaScript. Чи можна отримати більше пояснень для nooby, як я? ;)

1

Замість того, щоб надавати метабокс лише для приховування його за допомогою 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 за бажанням.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.