¿Cómo creo un ciclo while dentro de una cadena de PHP?

3 minutos de lectura

avatar de usuario
usuario2593040

Estoy creando una consulta usando shortcodes ultimate lightbox. Pero la única forma en que esto funcionará dentro de una página php normal es guardar los datos como una cadena. Entonces, lo que debo hacer es crear mi consulta pero de alguna manera obtener mis resultados dentro de una cadena.

Esto es lo que funciona antes de usar cualquier tipo de consulta php:

 <?php     
 $my_tabs = "<ul class="easybuttons">
 <li>[su_lightbox type="inline" src="#lightbox1"]AT&amp;T[/su_lightbox]</li>
 <li>[su_lightbox type="inline" src="#lightbox2"]Sprint[/su_lightbox]</li>
 <li>[su_lightbox type="inline" src="#lightbox3"]T-Mobile[/su_lightbox]</li>
 </ul>";

 echo do_shortcode( $my_tabs );
 ?> 

pero necesito que el ATT, Sprint, T-Mobile sea dinámico. Tenga en cuenta que el código abreviado solo funcionará si está dentro de una cadena.

Entonces, ¿cómo puedo hacer un ciclo while dentro de esta cadena? Intenté usar un operador pero no funcionó.

$args = array('post_type' => 'services', 'category_name' =>  $childid, 'order_by' => 'the_title', 'order' => 'ASC');     

 query_posts($args);

// The Query
$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) {
 $my_tabs .= '<ul class="easybuttons">'; 
 while ( $the_query->have_posts() ) { 
 $the_query->the_post();
 $my_tabs .= '<li>[su_lightbox type="inline" src="#lightbox1"]' . get_the_title() . '</li>';
 }
$my_tabs .= '</ul>';
}
/* Restore original Post Data */
wp_reset_postdata();

  echo do_shortcode( $my_tabs );
 ?>

ACTUALIZAR:

Intenté usar este código pero funciona. No pasa nada. No recibo ningún error, pero no se muestra ningún código abreviado.

 <?php 
  $args = array('post_type' => 'services', 'category_name' =>  $childid, 'order_by' => 'the_title', 'order' => 'ASC');   


 // The Query
  $the_query = new WP_Query( $args );

 // The Loop
 if ( $the_query->have_posts() ) {
  $lid = 1;
  $my_tabs .= '<ul class="easybuttons">'; 
  while ( $the_query->have_posts() ) { 
   $the_query->the_post();
   $my_tabs .= '<li>[su_lightbox type="inline" src="#lightbox' . $lid . '"]' . get_the_title() . '</li>';
   $lid++;
  }
 $my_tabs .= '</ul>';
 }

 echo do_shortcode( $my_tabs );
 wp_reset_postdata();   

avatar de usuario
enigma

Necesitas inicializar la variable. $my_tabs en algún lugar, por ejemplo, fuera del bloque if, e incremente la identificación de la caja de luz. no necesitas llamar query_posts(). order_by debiera ser titleno the_title. Cerciorarse $childid es definitivamente un cadena de la babosa de categoría, no el nombre, en caso de duda, elimine ese parámetro por completo para ver si obtiene algo, ya que imagino que este es probablemente el problema principal.

$args = array('post_type' => 'services', 'category_name' =>  $childid, 'order_by' => 'title', 'order' => 'ASC');

// The Query
$the_query = new WP_Query( $args );

$my_tabs="";

// The Loop
if ( $the_query->have_posts() ) {
 $lid = 1;
 $my_tabs .= '<ul class="easybuttons">'; 
 while ( $the_query->have_posts() ) { 
  $the_query->the_post();
  $my_tabs .= '<li>[su_lightbox type="inline" src="#lightbox' . $lid . '"]' . get_the_title() . '</li>';
  $lid++;
 }
$my_tabs .= '</ul>';
}

  • ¡Sí! ¡Ese fue en realidad mi próximo desafío! ¡Intentaré esto!

    – usuario2593040

    19/04/2015 a las 21:19

  • Esta nueva consulta aparece sin resultados. Mmm

    – usuario2593040

    19/04/2015 a las 21:21

  • @ user2593040 Ver mi respuesta actualizada. Si sigue sin funcionar, prueba con var_dump($the_query), a ver qué sale

    – enigma

    19/04/2015 a las 21:34

  • @ user2593040 ¿Y has intentado eliminar 'category_name' => $childid de los argumentos? Si es así, ¿podría publicar ese vardump? Algo en la consulta hace que no se muestren publicaciones, y esta es mi mejor suposición.

    – enigma

    19/04/2015 a las 21:45


¿Ha sido útil esta solución?