Ich verwende das CMB2-Plugin, um Metaboxen zu einem benutzerdefinierten Beitragstyp hinzuzufügen. Ich füge die zusätzlichen Metaboxen über functions.php zum Kinderthema hinzu. Es kann erwähnenswert sein, dass für übergeordnetes Thema/benutzerdefinierten Beitrag bereits einige Metaboxen definiert sind. Ich ergänze nur ...
Ich habe bereits erfolgreich Metaboxen mit dem Feldtyp = Text und Echowerten in die Zielseite erstellt. Bei dem Feldtyp = Auswählen kann ich das Metafeld erstellen, aber die ausgewählte Option nicht in die Zielseite übertragen.
Könnten Sie mir bitte helfen? Ich schätze es.
Functions.php (Erstellen der Metaboxen)
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;
}
Und dann gebe ich in den Inhaltsbereich der Seite aus
<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>
Für den Anfang empfehle ich, die API für die Registrierung von Metaboxen und Feldern zu verwenden, die hier angezeigt werden: https://github.com/WebDevStudios/CMB2/wiki/Basic-Usage#create-a-metabox . Um das label der Auswahloption wiederzugeben, würden Sie Folgendes tun:
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' ),
);
}
Und dann im Thema:
<?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>