Отображение oembed в повторяемых метабоксах с использованием CMB2
Я использую CMB2 для настройки повторяющегося поля метабоксов, но не могу найти документацию о том, как вывести повторяющееся oEmbed поле на фронтенде. С приведённым ниже кодом метабокс работает в админке:
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' => __( 'Медиаресурсы', 'cmb2' ),
'object_types' => array( 'resources', ),
) );
// Родительский элемент
$group_field_id = $cmb_group->add_field( array(
'id' => $prefix . 'resources_media_group',
'type' => 'group',
'options' => array(
'group_title' => __( 'Запись {#}', 'cmb2' ),
'add_button' => __( 'Добавить ещё одну запись', 'cmb2' ),
'remove_button' => __( 'Удалить запись', 'cmb2' ),
'sortable' => true, // бета
),
) );
// Заголовок медиаресурса
$cmb_group->add_group_field( $group_field_id, array(
'name' => __( 'Заголовок медиаресурса', 'cmb2' ),
'id' => 'media_resource_title',
'type' => 'text',
) );
// Медиаресурс
$cmb_group->add_group_field( $group_field_id, array(
'name' => __( 'oEmbed', 'cmb2' ),
'id' => $prefix . 'media_embed',
'type' => 'oembed',
) );
}
Я могу вывести заголовок на фронтенде, но не встроенный URL?
<?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>
Итак, чтобы ответить на свой же вопрос.
В функции/бэкенд-коде я допустил ошибку в этой строке:
'id' => $prefix . 'media_embed',
В повторяющемся поле (repeater field) не нужно указывать префикс, так как он уже определен в родительском элементе, поэтому должно быть:
'id' => 'media_embed',
А для фронтенда эту строку:
<?php $value = get_post_meta( get_the_ID(), 'media_embed', true ); echo wp_oembed_get( $value ); ?>
Я изменил на:
<?php echo wp_oembed_get ($value['media_embed']); ?>
И это сработало!
