CMB2 metabox conditional logic
Sto utilizzando CMB2 per i metabox nei post personalizzati. Aggiungo un metabox usando il codice seguente:
$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',
) );
Capisco che show_this_field_if_true sarà una funzione che restituirà vero o falso. Ma voglio renderlo condizionale rispetto a un altro campo. Questo campo deve mostrarsi solo se il valore di un altro campo è vero.
Ecco un esempio che non mostra questo campo se non è il template della pagina frontale
function show_this_field_if_true( $cmb ) {
if ( $cmb->object_id !== get_option( 'page_on_front' ) ) {
return false;
}
return true;
}
Come posso rendere questo condizionale rispetto a un campo?
Devi sostituire la chiamata get_option
con una chiamata a get_post_meta
:
function show_this_field_if_true( $cmb ) {
// Controlla se esiste l'altro valore meta
if ( ! get_post_meta( $cmb->object_id, 'other_meta_key_to_check', 1 ) ) {
return false;
}
return true;
}
Tieni presente che questo funzionerà solo per il caricamento iniziale della pagina e non mostrerà il campo finché non aggiorni il valore di other_meta_key_to_check
e salvi la pagina.

Dovrebbe essere possibile utilizzare ajax per salvare i campi che dovrebbero attivare la visualizzazione o la nascita di un box di campo e ricaricare i valori meta, vero?

Il modo migliore per farlo è utilizzare JavaScript e ci sono un paio di plugin CMB2 che ti permettono di farlo facilmente:
