echo value from 'select' field type into page template using cmb2?
Folosesc plugin-ul CMB2 pentru a adăuga metabox-uri într-un custom post type. Adaug metabox-urile suplimentare prin functions.php în tema child. Este important de menționat că tema părinte/post type-ul custom are deja definite câteva metabox-uri, eu doar completez...
Am reușit deja să creez metabox-uri cu câmp de tip Text și să afișez valorile în pagina țintă, însă când câmpul este de tip Select pot crea meta câmpul dar nu pot afișa opțiunea selectată în pagina țintă.
Puteți să mă ajutați? Apreciez.
Functions.php (crearea metabox-urilor)
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;
}
Și apoi afișez în conținutul paginii
<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>
Pentru început, recomand să folosești API-ul pentru înregistrarea metabox-urilor și câmpurilor, care poate fi văzut aici: https://github.com/WebDevStudios/CMB2/wiki/Basic-Usage#create-a-metabox. Pentru a afișa eticheta opțiunii selectate, ai putea face ceva de genul acesta:
add_action( 'cmb2_admin_init', 'custom_metabox' );
function custom_metabox() {
$cmb = new_cmb2_box( array(
'id' => REALIA_PROPERTY_PREFIX . 'ficha_tecnica',
'title' => 'Fișa Tehnică',
'object_types' => array( 'property' ),
) );
$cmb->add_field( array(
'id' => REALIA_PROPERTY_PREFIX . 'area_terreno',
'name' => 'Suprafața Terenului',
'type' => 'text'
) );
$cmb->add_field( array(
'id' => 'wiki_test_select',
'name' => 'Test select inline',
'type' => 'select',
'show_option_none' => true,
'default' => 'custom',
// Folosește un callback pentru opțiuni
'options_cb' => 'wiki_test_select_options',
) );
}
function wiki_test_select_options() {
// returnează un array standard de opțiuni
return array(
'standard' => __( 'test123', 'ficha' ),
'custom' => __( 'test1234', 'ficha' ),
'none' => __( 'test12345', 'ficha' ),
);
}
Și apoi în tema:
<?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>
