web-dev-qa-db-ja.com

cmb2を使用して 'select'フィールドタイプからページテンプレートに値をエコー?

カスタム投稿タイプにメタボックスを追加するためにCMB2プラグインを使用しています。私はfunctions.phpで追加のメタボックスを子テーマに追加しています。親テーマ/カスタム投稿にはすでにいくつかのメタボックスが定義されていることを言及する価値があるかもしれません。

フィールドタイプ=テキストでメタボックスを作成し、ターゲットページに値をエコーし​​ました。ただし、フィールドタイプ=選択の場合、メタフィールドは作成できますが、選択したオプションをターゲットページにエコーすることはできません。

手伝ってもらえますか。それは有り難いです。

Functions.php(メタボックスの作成)

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;

}

そして、私はページのコンテンツエリアに出力します

    <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

初心者のために、私はあなたがここで見ることができる登録メタボックスとフィールドのためにあなたがAPIを使うことを勧めます: https://github.com/WebDevStudios/CMB2/wiki/Basic-Usage#create-a-metabox 。選択オプションの label をエコーするには、次のようにします。

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

そしてテーマでは:

<?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