CMB2 metabox logică condițională
Folosesc CMB2 pentru metabox-uri pe postări personalizate. Adaug un metabox folosind codul de mai jos:
$cmb_demo->add_field( array(
'name' => __( 'Text Test', 'cmb2' ),
'desc' => __( 'descriere câmp (opțional)', 'cmb2' ),
'id' => $prefix . 'text',
'type' => 'text',
'show_on_cb' => 'show_this_field_if_true',
) );
Înțeleg că show_this_field_if_true va fi o funcție care va returna true sau false. Dar vreau să fac asta condițional cu un alt câmp. Acest câmp să apară doar dacă valoarea altui câmp este true.
Aici este un exemplu care Nu afișează acest câmp dacă nu este șablonul paginii principale
function show_this_field_if_true( $cmb ) {
if ( $cmb->object_id !== get_option( 'page_on_front' ) ) {
return false;
}
return true;
}
Cum pot face această condiție cu un câmp?

Trebuie să înlocuiți apelul get_option
cu un apel la get_post_meta
:
function show_this_field_if_true( $cmb ) {
// Verifică dacă există altă valoare meta
if ( ! get_post_meta( $cmb->object_id, 'other_meta_key_to_check', 1 ) ) {
return false;
}
return true;
}
Rețineți, acest lucru va funcționa doar pentru încărcarea inițială a paginii și nu va afișa câmpul până când nu actualizați valoarea other_meta_key_to_check
și salvați pagina.

Ar trebui să fie posibil să folosești ajax pentru a salva câmpurile care ar trebui să declanșeze afișarea sau ascunderea unui câmp, și să reîncarci valorile meta, nu-i așa?

Cea mai bună metodă de a face acest lucru este prin utilizarea JavaScript și există câteva plugin-uri CMB2 care vă permit să faceți acest lucru cu ușurință:
