несколько ограничений show_on для CMB2

Я только начинаю работать с плагином CMB2. Насколько я могу судить, нет возможности применить к ящику несколько ограничений. Существует ограничение по типу сообщения и два встроенных show_on условия (согласно Параметры отображения, и вы можете добавить пользовательские show_on условия. Но когда дело доходит до show_on, вы можете передать только один массив с парой ключ/значение. Я пытался передать массив массивов, и это не похоже работать, например:

$cmb = new_cmb2_box( array(
    'id'                => 'slideshow_content_box',
    'title'             => __( 'Slideshow content' ),
    'object_types'      => array( 'page' ),
    'show_on'   => array(
        array(
            'key'       => 'id',
            'value'     => array( 30 )
        ),
        array(
            'key'       => 'page-template',
            'value'     => 'page_template.php'
        ),
    ),
    'context'           => 'normal',
    'priority'          => 'high',
    'show_names'        => true,
    'closed'            => false,
));

Я пытался взломать это с помощью фильтра cmb2_show_on, но пользовательские аргументы, похоже, удаляются.

Есть ли способ объединить несколько ограничений show_on?


person Steve Taylor    schedule 19.05.2015    source источник


Ответы (1)


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

Ваше решение будет примерно таким:

$cmb = new_cmb2_box( array(
    'id'                => 'slideshow_content_box',
    'title'             => __( 'Slideshow content' ),
    'object_types'      => array( 'page' ),
    'show_on_cb'        => 'add_conditions',
    'context'           => 'normal',
    'priority'          => 'high',
    'show_names'        => true,
    'closed'            => false,
));

//Return true if page template is 'page-template' or id is 30.
function add_conditions() {
    $page_template = get_page_template();
    $page_id = get_the_id();

    if ( $page_template === 'page-template' || $page_id === 30 ) {
        return true;
    }
    return false;
}

Дополнительную документацию по show_on можно найти здесь, но она обширна, поэтому может сбивать с толку.

person J. Walkley    schedule 04.04.2016
comment
Привет, это старый пост, но вам нужно получить аргумент функции обратного вызова (он содержит объект function add_conditions( $cmb )), получить от него идентификатор ($cmb->object_id()), а затем get_page_template_slug( $cmb->object_id() ); - person pcarvalho; 06.08.2017
comment
Спасибо! Мне пришлось использовать функцию базового имени PHP, чтобы получить только имя файла шаблона: basename(get_page_template()) - person Christer Fernstrom; 26.10.2017