Условная логика для метабоксов CMB2

22 сент. 2015 г., 06:03:40
Просмотры: 2.7K
Голосов: 4

Я использую CMB2 для метабоксов на пользовательских записях. Я добавляю метабокс с помощью следующего кода:

$cmb_demo->add_field( array(
    'name'       => __( 'Test Text', 'cmb2' ), // Название текстового поля
    'desc'       => __( 'field description (optional)', 'cmb2' ), // Описание поля (необязательно)
    'id'         => $prefix . 'text', // Идентификатор поля
    'type'       => 'text', // Тип поля
    'show_on_cb' => 'show_this_field_if_true', // Функция для условного отображения
) );

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

Вот пример, который Не показывает это поле, если это не шаблон главной страницы:

function show_this_field_if_true( $cmb ) {
    // Проверяем, является ли текущая страница главной
    if ( $cmb->object_id !== get_option( 'page_on_front' ) ) {
        return false;
    }
    return true;
}

Как я могу сделать это условие зависимым от другого поля?

0
Все ответы на вопрос 2
2

Вам нужно заменить вызов get_option на вызов get_post_meta:

function show_this_field_if_true( $cmb ) {
    // Проверяем, существует ли другое мета-значение
    if ( ! get_post_meta( $cmb->object_id, 'other_meta_key_to_check', 1 ) ) {
        return false;
    }
    return true;
}

Имейте в виду, это будет работать только при первоначальной загрузке страницы и не покажет поле, пока вы не обновите значение other_meta_key_to_check и не сохраните страницу.

15 мар. 2016 г. 02:48:53
Комментарии

Должно быть возможно использовать ajax для сохранения полей, которые должны вызывать отображение или скрытие блока полей, и перезагружать мета-значения, не так ли?

gloria gloria
1 февр. 2017 г. 18:58:14

Да, это определенно возможно, но поскольку существует так много различных типов полей, процесс не так прост для документирования.

Justin Sternberg Justin Sternberg
17 сент. 2019 г. 06:03:49
0

Лучший способ сделать это — использовать JavaScript, и есть несколько плагинов CMB2, которые позволяют сделать это легко:

  1. CMB2 Conditional
  2. CMB2 Conditional Logic
27 нояб. 2019 г. 08:52:56