Lógica condicional para metaboxes en CMB2
Estoy utilizando CMB2 para metaboxes en posts personalizados. Estoy añadiendo un metabox usando el siguiente código:
$cmb_demo->add_field( array(
'name' => __( 'Texto de prueba', 'cmb2' ),
'desc' => __( 'descripción del campo (opcional)', 'cmb2' ),
'id' => $prefix . 'text',
'type' => 'text',
'show_on_cb' => 'mostrar_este_campo_si_verdadero',
) );
Entiendo que mostrar_este_campo_si_verdadero será una función que devolverá verdadero o falso. Pero, quiero hacer esto condicional con otro campo. Este campo debería mostrarse solo si el valor de otro campo es verdadero.
Aquí hay un ejemplo que no muestra este campo si no es la plantilla de página frontal:
function mostrar_este_campo_si_verdadero( $cmb ) {
if ( $cmb->object_id !== get_option( 'page_on_front' ) ) {
return false;
}
return true;
}
¿Cómo puedo hacer esto condicional con un campo?
Necesitas reemplazar la llamada get_option
con una llamada a get_post_meta
:
function show_this_field_if_true( $cmb ) {
// Verificar si existe otro valor meta
if ( ! get_post_meta( $cmb->object_id, 'other_meta_key_to_check', 1 ) ) {
return false;
}
return true;
}
Ten en cuenta que esto solo funcionará para la carga inicial de la página y no mostrará el campo hasta que actualices el valor de other_meta_key_to_check
y guardes la página.

¿No debería ser posible usar ajax para guardar los campos que se supone que activan la visualización u ocultación de un cuadro de campo, y recargar los valores meta?

La mejor manera de hacer esto es usando JavaScript y hay un par de plugins de CMB2 que te permiten hacerlo fácilmente:
