web-dev-qa-db-fra.com

valeur d'écho du type de champ 'select' dans le modèle de page à l'aide de cmb2?

J'utilise le plugin CMB2 pour ajouter des métaboxes dans un type de publication personnalisé. J'ajoute les métaboxes supplémentaires via functions.php sur le thème de l'enfant. Il vaut la peine de mentionner que le thème parent/poste personnalisé a déjà quelques métaboxes définis, je ne fais que compléter ...

J'ai déjà créé avec succès des métaboxes avec le type de champ = Texte et les valeurs d'écho dans la page cible. Cependant, lorsque archivé est classé = Sélectionnez, je peux créer le champ méta mais je ne peux pas renvoyer l'option sélectionnée dans la page cible.

Pourriez-vous s'il vous plaît m'aider? Je vous en suis reconnaissant.

Functions.php (création des métaboxes)

add_action( 'cmb2_meta_boxes', 'custom_metabox' );

function custom_metabox( array $metaboxes ) {
    $metaboxes[REALIA_PROPERTY_PREFIX . 'ficha_tecnica'] = array(
        'id'                        => REALIA_PROPERTY_PREFIX . 'ficha',
        'title'                     => 'Ficha Técnica',
        'object_types'              => array( 'property' ),
        'context'                   => 'normal',
        'priority'                  => 'high',
        'show_names'                => true,
        'fields'                    => array(

            array(
                'id'    => REALIA_PROPERTY_PREFIX . 'area_terreno',
                'name'  => 'Área do Terreno',
                'type'  => 'text'
            ),

            array(
                'id'               => 'wiki_test_select',
                'name'             => 'Test select inline',
                'type'             => 'select',
                'show_option_none' => true,
                'default'          => 'custom',
                'options'          => array(
                    'standard' => __( 'test123', 'ficha' ),
                    'custom'   => __( 'test1234', 'ficha' ),
                     'none'     => __( 'test12345', 'ficha' ),
            ),
        ),
    ),
);

return $metaboxes;

}

Et puis je sortie sur la zone de contenu de la page

    <div class="col-sm-12 <?php if ( ! empty( $images ) ) : ?>col-md-5<?php else : ?>col-md-12<?php endif; ?>">
    <div class="property-list">
        <h2><?php echo __( 'Property overview', 'realia' ); ?></h2>

        <dl>
            <?php $price = Realia_Price::get_property_price(); ?>
            <?php if ( ! empty( $price ) ) : ?>
                <dt><?php echo __( 'Price', 'realia' )?></dt><dd><?php echo wp_kses( $price, wp_kses_allowed_html( 'post' ) ); ?></dd>
            <?php endif; ?>

            <?php $area = get_post_meta( get_the_ID(), REALIA_PROPERTY_PREFIX . 'attributes_area', true ); ?>
            <?php if ( ! empty( $area ) ) : ?>
                <dt><?php echo __( 'Área do Terreno', 'realia' ); ?></dt><dd><?php echo esc_attr( $area ); ?> <?php echo get_theme_mod( 'realia_measurement_area_unit', 'sqft' ); ?></dd>
            <?php endif; ?>

            <?php $metafield_id = get_the_ID(); ?>
            <?php $test = get_post_meta( $metafield_id, REALIA_PROPERTY_PREFIX . 'options', true ); ?>
            <?php if ( ! empty( $test ) ) : ?>
                <dt><?php echo __( 'test123', 'realia' ); ?></dt><dd><?php echo $test; ?></dd>
            <?php endif; ?>

        </dl>
    </div><!-- /.property-list -->
</div>
4
VA-YVR

Pour commencer, je vous recommande d'utiliser l'API pour les métaboxes d'enregistrement et les champs que vous pouvez voir ici: https://github.com/WebDevStudios/CMB2/wiki/Basic-Usage#create-a-metabox . Pour faire écho à l'option label de l'option sélectionnée, procédez comme suit:

add_action( 'cmb2_admin_init', 'custom_metabox' );

function custom_metabox() {
    $cmb = new_cmb2_box( array(
        'id'           => REALIA_PROPERTY_PREFIX . 'ficha_tecnica',
        'title'        => 'Ficha Técnica',
        'object_types' => array( 'property' ),
    ) );

    $cmb->add_field( array(
        'id'   => REALIA_PROPERTY_PREFIX . 'area_terreno',
        'name' => 'Área do Terreno',
        'type' => 'text'
    ) );

    $cmb->add_field( array(
        'id'               => 'wiki_test_select',
        'name'             => 'Test select inline',
        'type'             => 'select',
        'show_option_none' => true,
        'default'          => 'custom',
        // Use an options callback
        'options_cb'       => 'wiki_test_select_options',
    ) );

}

function wiki_test_select_options() {
    // return a standard options array
    return array(
         'standard' => __( 'test123', 'ficha' ),
         'custom'   => __( 'test1234', 'ficha' ),
         'none'     => __( 'test12345', 'ficha' ),
    );
}

Et ensuite dans le thème:

<?php
$metafield_id = get_the_ID();
$options = wiki_test_select_options();
$key = get_post_meta( $metafield_id, 'wiki_test_select', true );
$option_name = isset( $options[ $key ] ) ? $options[ $key ] : $options['custom'];
?>
<dt><?php echo $option_name; ?></dt><dd><?php echo $key; ?></dd>
4
Justin Sternberg