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


Я использую 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. Но я хочу сделать это условным с другим полем. Это поле покажет, является ли значение другого поля истинным.

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

function show_this_field_if_true( $cmb ) {
    if ( $cmb->object_id !== get_option( 'page_on_front' ) ) {
        return false;
    }
    return true;
}

Как я могу сделать это условным с помощью поле?

Author: Travis Northcutt, 2015-09-22

2 answers

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

  1. Условный CMB2
  2. Условная логика CMB2
 0
Author: Adil Elsaeed, 2019-11-27 06:52:56

Вам необходимо заменить вызов get_option вызовом на get_post_meta:

function show_this_field_if_true( $cmb ) {
    // Check if other meta value exists
    if ( ! get_post_meta( $cmb->object_id, 'other_meta_key_to_check', 1 ) ) {
        return false;
    }
    return true;
}

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

 2
Author: Justin Sternberg, 2019-09-16 13:50:23