Отображение oembed в повторяемых метабоксах с использованием CMB2

1 июл. 2015 г., 19:37:56
Просмотры: 1.42K
Голосов: 1

Я использую 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>
0
Все ответы на вопрос 1
0

Итак, чтобы ответить на свой же вопрос.

В функции/бэкенд-коде я допустил ошибку в этой строке:

'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']); ?>

И это сработало!

3 июл. 2015 г. 14:35:40