Mostrar oembed en metaboxes repetibles usando CMB2

1 jul 2015, 19:37:56
Vistas: 1.42K
Votos: 1

Estoy usando CMB2 para configurar un campo repetible de meta boxes pero no encuentro documentación sobre cómo hacer que un campo oEmbed repetible se muestre en el frontend. Con el código siguiente tengo el metabox funcionando en el 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'         => __( 'Recursos multimedia', 'cmb2' ),
          'object_types'  => array( 'resources', ),
        ) );

        // Grupo padre
        $group_field_id = $cmb_group->add_field( array(
          'id'          => $prefix . 'resources_media_group',
          'type'        => 'group',
          'options'     => array(
        'group_title'   => __( 'Entrada {#}', 'cmb2' ), 
        'add_button'    => __( 'Añadir otra entrada', 'cmb2' ),
        'remove_button' => __( 'Eliminar entrada', 'cmb2' ),
        'sortable'      => true, // beta
        ),
          ) );

        // Título del recurso multimedia
        $cmb_group->add_group_field( $group_field_id, array(
          'name'        => __( 'Título del recurso multimedia', 'cmb2' ),
          'id'          => 'media_resource_title',
          'type'        => 'text',
          ) );

        // Recurso multimedia
        $cmb_group->add_group_field( $group_field_id, array(
          'name'  => __( 'oEmbed', 'cmb2' ),
          'id'    => $prefix . 'media_embed',
          'type'  => 'oembed',
          ) );

      }

Puedo hacer que el título se muestre en el frontend pero no la URL incrustada:

      <?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
Todas las respuestas a la pregunta 1
0

Así que, para responder a mi propia pregunta.

En el código de funciones/backend cometí un error con esta línea:

'id' => $prefix . 'media_embed',

En un campo repetidor no necesita el prefijo ya que está definido en el padre, por lo que debería ser:

'id' => 'media_embed',

Y para el frontend, esta línea:

<?php $value = get_post_meta( get_the_ID(), 'media_embed', true ); echo wp_oembed_get( $value ); ?>

Fue cambiada a:

<?php echo wp_oembed_get ($value['media_embed']); ?>

¡Y eso solucionó el problema!

3 jul 2015 14:35:40