web-dev-qa-db-fra.com

Logique conditionnelle metabox CMB2

J'utilise CMB2 pour metabox sur des publications personnalisées. J'ajoute une metabox en utilisant le code ci-dessous:

$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', 
) );

Je comprends que show_this_field_if_true sera une fonction qui renverra true ou false. Mais, je veux rendre cela conditionnel à un autre champ. Ce champ indiquera si la valeur d'un autre champ est vraie.

Voici un exemple qui n'affiche pas ce champ s'il ne s'agit pas du modèle de page d'accueil.

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

Comment puis-je rendre cela conditionnel avec un champ?

3
Rasel Ahmed

Vous devez remplacer l'appel get_option par un appel à 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;
}

N'oubliez pas que cela ne fonctionnera que pour le chargement de page initial et ne montrera pas le champ tant que vous n'avez pas mis à jour la valeur other_meta_key_to_check et enregistré la page.

2
Justin Sternberg