Условная логика метабокса 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;
}
Как я могу сделать это условным с помощью поле?
2 answers
Лучший способ сделать это - использовать JavaScript, и есть пара плагинов CMB2, которые позволяют вам легко это сделать:
Вам необходимо заменить вызов 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
и не сохраните страницу.