Mostrare oembed in metabox ripetibili usando CMB2
Sto usando CMB2 per impostare un campo ripetibile di metabox ma non riesco a trovare documentazione su come mostrare un campo oEmbed ripetibile sul frontend. Con il codice qui sotto ho il metabox funzionante nel 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' => __( 'Risorse Media', 'cmb2' ),
'object_types' => array( 'resources', ),
) );
// Parent
$group_field_id = $cmb_group->add_field( array(
'id' => $prefix . 'resources_media_group',
'type' => 'group',
'options' => array(
'group_title' => __( 'Voce {#}', 'cmb2' ),
'add_button' => __( 'Aggiungi Altra Voce', 'cmb2' ),
'remove_button' => __( 'Rimuovi Voce', 'cmb2' ),
'sortable' => true, // beta
),
) );
// Titolo Risorsa Media
$cmb_group->add_group_field( $group_field_id, array(
'name' => __( 'Titolo Risorsa Media', 'cmb2' ),
'id' => 'media_resource_title',
'type' => 'text',
) );
// Risorsa Media
$cmb_group->add_group_field( $group_field_id, array(
'name' => __( 'oEmbed', 'cmb2' ),
'id' => $prefix . 'media_embed',
'type' => 'oembed',
) );
}
Riesco a far vedere il titolo sul frontend ma non l'URL incorporato?
<?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>
Quindi, per rispondere alla mia domanda.
Nel codice backend/funzioni ho fatto un errore con questa riga:
'id' => $prefix . 'media_embed',
In un campo ripetitore non serve il prefisso poiché è definito nel genitore e quindi dovrebbe essere:
'id' => 'media_embed',
E per il frontend questa riga:
<?php $value = get_post_meta( get_the_ID(), 'media_embed', true ); echo wp_oembed_get( $value ); ?>
È stata cambiata in:
<?php echo wp_oembed_get ($value['media_embed']); ?>
E questo ha funzionato!
