tag name keywords hacer generar etiquetas ejemplos como php arrays foreach metadata is-empty

php - name - ¿Cómo mostrar los metadatos del campo de grupo+Container div si existe y mostrar el texto predeterminado si los campos están vacíos?



meta tags ejemplos (1)

No soy programador, así que no tengo ni idea de las soluciones. He estado usando CMB2 para un tipo de publicación personalizada de Portafolio / Proyecto.

He incorporado una presentación de diapositivas que utiliza los metadatos del campo de grupo para cada diapositiva.

En la página de inicio hay 2 publicaciones con la etiqueta "Proyecto vacío" y "Proyecto de prueba 1". Si hace clic en el Proyecto vacío, se lo dirigirá a su página de publicación única, allí verá un div ".flexslider" con un fondo rojo. Ese es el div que me gustaría eliminar si los campos de grupo están vacíos. Me refiero a que mi mensaje completo eliminó el div sin dejar divs vacíos en lugar de cambiar el color de fondo a blanco.

Si hace clic en "Probar Proyecto 1", aparecerán las imágenes cargadas usando Campos de Grupo Repetibles dentro de la presentación de diapositivas "flexslider". Ese es el resultado de los metacampos que se guardaron con metadatos dentro de ellos.

METABOX // Aquí está el código que he usado para registrar los campos repetibles, lo que me permite insertar imágenes y subtítulos para la presentación de diapositivas.

add_action( ''cmb2_admin_init'', ''gallery_metabox'' ); function gallery_metabox() { $prefix = ''gallery_''; /** * Repeatable Field Groups */ $cmb_group = new_cmb2_box( array( ''id'' => $prefix . ''metabox'', ''title'' => __( ''Gallery'', ''cmb2'' ), ''object_types'' => array( ''portfolio'', ), ) ); // $group_field_id is the field id string, so in this case: $prefix . ''demo'' $group_field_id = $cmb_group->add_field( array( ''id'' => $prefix . ''demo'', ''type'' => ''group'', ''options'' => array( ''group_title'' => __( ''Image {#}'', ''cmb2'' ), // {#} gets replaced by row number ''add_button'' => __( ''Add Another Image'', ''cmb2'' ), ''remove_button'' => __( ''Remove Image'', ''cmb2'' ), ''sortable'' => true, // beta ''closed'' => true, // true to have the groups closed by default ), ) ); $cmb_group->add_group_field( $group_field_id, array( ''name'' => __( ''Image'', ''cmb2'' ), ''id'' => ''image'', ''type'' => ''file'', ) ); $cmb_group->add_group_field( $group_field_id, array( ''name'' => __( ''Image Caption'', ''cmb2'' ), ''id'' => ''image_caption'', ''type'' => ''text'', ) ); }

Seguí esto para mostrar metadatos para esos campos de grupo. Todo funciona perfectamente bien cuando uso este fragmento de código:

INTERFAZ//

<div class="flexslider"> <ul class="slides"> <?php $entries = get_post_meta( get_the_ID(), ''gallery_demo'', true ); foreach ( (array) $entries as $key => $entry ) { $img = $img_url = $caption = ''''; if ( isset( $entry[''image_id''] ) ) { $img = wp_get_attachment_image( $entry[''image_id''], ''share-pick'', null, array( ''class'' => ''thumb'', ) ); } if ( isset( $entry[''image_id''] ) ) { $img_url = wp_get_attachment_image_url( $entry[''image_id''], null ); } $caption = isset( $entry[''image_caption''] ) ? wpautop( $entry[''image_caption''] ) : ''''; echo ''<li data-thumb="''. $img_url .''">''; echo $img; echo $caption; echo ''</li>''; } ?> </ul> </div>

pero me gustaría mostrar los metadatos .flexslider container + SÓLO cuando existen datos. Si los campos están vacíos, me gustaría mostrar el texto predeterminado o, mejor aún, eliminar todo el div mismo. Intenté hacer mi mejor esfuerzo para investigar, pero parece que no puedo descubrir qué está mal.

También intenté este fragmento de código:

INTENTO//

<?php $entries = get_post_meta( get_the_ID(), ''gallery_demo'', true ); if(empty ($entry)) { echo ''''; } else { foreach ( (array) $entries as $key => $entry ) { echo ''<div class="flexslider">''; echo ''<ul class="slides">''; $img = $img_url = $caption = ''''; if ( isset( $entry[''image_id''] ) ) { $img = wp_get_attachment_image( $entry[''image_id''], ''share-pick'', null, array( ''class'' => ''thumb'', ) ); } if ( isset( $entry[''image_id''] ) ) { $img_url = wp_get_attachment_image_url( $entry[''image_id''], null ); } $caption = isset( $entry[''image_caption''] ) ? wpautop( $entry[''image_caption''] ) : ''''; echo ''<li data-thumb="''. $img_url .''">''; echo $img; echo $caption; echo ''</li>''; echo ''</ul>''; echo ''</div>''; } } ?>

Lo único bueno del código anterior es que definitivamente elimina el div cuando metafield está vacío, pero si los metadatos SIEMPRE existen, el div aún se ha ido.

EDITAR // Intenté usar el código "@stweb" en las respuestas a continuación:

$entries = get_post_meta( get_the_ID(), ''gallery_demo'', true ); foreach ( (array) $entries as $key => $entry ) { if(empty($entry)){ continue; } echo ''<div class="flexslider">''; echo ''<ul class="slides">''; $img = $img_url = $caption = ''''; if ( isset( $entry[''image_id''] ) ) { $img = wp_get_attachment_image( $entry[''image_id''], ''share-pick'', null, array( ''class'' => ''thumb'', ) ); } if ( isset( $entry[''image_id''] ) ) { $img_url = wp_get_attachment_image_url( $entry[''image_id''], null ); } $caption = isset( $entry[''image_caption''] ) ? wpautop( $entry[''image_caption''] ) : ''''; echo ''<li data-thumb="''. $img_url .''">''; echo $img; echo $caption; echo ''</li>''; echo ''</ul>''; echo ''</div>''; }

pero no pasa nada ... el div rojo solo se sienta allí en lugar de desaparecer.

Básicamente, me gustaría descubrir cómo puedo mostrar el primer fragmento de código SÓLO si las imágenes se cargaron en el campo de grupo y, en caso negativo, no mostrar nada, ni siquiera el contenedor div.

¿Puede alguien explicar por favor dónde me equivoqué?


Prueba esto:

$entries = get_post_meta( get_the_ID(), ''gallery_demo'', true ); foreach ( (array) $entries as $key => $entry ) { if(empty($entry)){ continue; } echo ''<div class="flexslider">''; echo ''<ul class="slides">''; $img = $img_url = $caption = ''''; if ( isset( $entry[''image_id''] ) ) { $img = wp_get_attachment_image( $entry[''image_id''], ''share-pick'', null, array( ''class'' => ''thumb'', ) ); } if ( isset( $entry[''image_id''] ) ) { $img_url = wp_get_attachment_image_url( $entry[''image_id''], null ); } $caption = isset( $entry[''image_caption''] ) ? wpautop( $entry[''image_caption''] ) : ''''; echo ''<li data-thumb="''. $img_url .''">''; echo $img; echo $caption; echo ''</li>''; echo ''</ul>''; echo ''</div>''; }

ACTUALIZAR:

foreach ( (array) $entries as $key => $entry ) { if ( !isset( $entry[''image_id''] ) || $entry[''image_id''] == '''' ) { continue; } echo ''<div class="flexslider">''; echo ''<ul class="slides">''; $img = $img_url = $caption = ''''; if ( isset( $entry[''image_id''] ) ) { $img = wp_get_attachment_image( $entry[''image_id''], ''share-pick'', null, array( ''class'' => ''thumb'', ) ); } if ( isset( $entry[''image_id''] ) ) { $img_url = wp_get_attachment_image_url( $entry[''image_id''], null ); } $caption = isset( $entry[''image_caption''] ) ? wpautop( $entry[''image_caption''] ) : ''''; echo ''<li data-thumb="''. $img_url .''">''; echo $img; echo $caption; echo ''</li>''; echo ''</ul>''; echo ''</div>''; }