Afisare oembed în cutii meta repetabile folosind CMB2
Folosesc CMB2 pentru a seta un câmp repetabil de cutii meta, dar nu găsesc nicio documentație despre cum să afișez un câmp oEmbed repetabil pe frontend. Cu codul de mai jos am cutia meta funcțională în backend:
add_action( 'cmb2_init', 'cmb2_register_repeatable_media_resources_metabox' );
function cmb2_register_repeatable_media_resources_metabox() {
$prefix = '_cmb_r_';
$cmb_group = new_cmb2_box( array(
'id' => $prefix . 'resources_media_metabox',
'title' => __( 'Resurse Media', 'cmb2' ),
'object_types' => array( 'resources', ),
) );
// Părinte
$group_field_id = $cmb_group->add_field( array(
'id' => $prefix . 'resources_media_group',
'type' => 'group',
'options' => array(
'group_title' => __( 'Intrare {#}', 'cmb2' ),
'add_button' => __( 'Adaugă Altă Intrare', 'cmb2' ),
'remove_button' => __( 'Șterge Intrarea', 'cmb2' ),
'sortable' => true, // beta
),
) );
// Titlul Resursei Media
$cmb_group->add_group_field( $group_field_id, array(
'name' => __( 'Titlul Resursei Media', 'cmb2' ),
'id' => 'media_resource_title',
'type' => 'text',
) );
// Resursa Media
$cmb_group->add_group_field( $group_field_id, array(
'name' => __( 'oEmbed', 'cmb2' ),
'id' => $prefix . 'media_embed',
'type' => 'oembed',
) );
}
Pot afișa titlul pe frontend, dar nu și URL-ul embedded?
<?php $resources_media_group = get_post_meta( get_the_ID(), '_cmb_r_resources_media_group', true ); ?>
<div>
<ul>
<?php foreach ( $resources_media_group as $value ) { ?>
<li>
<h3><?php echo $value['media_resource_title'] ?></h3>
<?php echo $value['media_embed'] ?>
</li>
<?php } ?>
</ul>
</div>

Deci, să îmi răspund singur la întrebare.
În funcțiile/codul de backend am făcut o greșeală cu această linie:
'id' => $prefix . 'media_embed',
Într-un câmp repeater nu este nevoie de prefix, deoarece acesta este definit în elementul părinte, așa că ar trebui să fie:
'id' => 'media_embed',
Iar pentru front-end, această linie:
<?php $value = get_post_meta( get_the_ID(), 'media_embed', true ); echo wp_oembed_get( $value ); ?>
A fost schimbată în:
<?php echo wp_oembed_get ($value['media_embed']); ?>
Și asta a funcționat!
