WordPress, si no hay resultados del bucle, no muestre el encabezado

2 minutos de lectura

Estoy usando WP_Query para recorrer un tipo de publicación personalizada en wordpress. Mi bucle se ve así:

<div class="bigRedStrip">
    <h2>Available Now!</h2>
</div>

<ul>
    <?php $loop = new WP_Query( array( 'post_type' => 'films', 'post_child' => 0, 'posts_per_page' => 8,'orderby' => 'date', 'order' => 'ASC', 'film-categories' => 'blu-ray' ) ); ?>

    <?php while ( $loop->have_posts() ) : $loop->the_post(); ?>

            <li>
             loop stuff here
            </li>

    <?php endwhile; ?>
</ul>

Como puede ver, antes del ciclo hay un encabezado que dice “¡Disponible ahora!”. Quiero volver a formatear el bucle para que, si no se devuelven publicaciones, no se muestre el div que contiene el título (clase div bigRedStrip). He probado varias soluciones potenciales, pero el problema con el que sigo tropezando es que todas estas “soluciones” requieren poner el <div class="bigRedStrip"> dentro del bucle, lo que da como resultado que el encabezado se repita para cada publicación devuelta. La idea es que el encabezado solo se muestre una vez. ¿Alguna idea de cómo puedo lograr esto?

Solo necesitas separar un poco las cosas. En primer lugar ejecutar la consulta:

<?php $loop = new WP_Query( array( 'post_type' => 'films', 'post_child' => 0, 'posts_per_page' => 8,'orderby' => 'date', 'order' => 'ASC', 'film-categories' => 'blu-ray' ) ); ?>

Luego comprueba si hay algo:

<?php if ($loop->have_posts()) { ?>

<div class="bigRedStrip">
    <h2>Available Now!</h2>
</div>

...

Y si es así, solo repite las publicaciones:

...

<ul>
    <?php while ( $loop->have_posts() ) : $loop->the_post(); ?>

            <li>
             loop stuff here
            </li>

    <?php endwhile; ?>
</ul>

<?php } ?>

avatar de usuario
el alfa

<?php $loop = new WP_Query( array( 'post_type' => 'films', 'post_child' => 0, 'posts_per_page' => 8,'orderby' => 'date', 'order' => 'ASC', 'film-categories' => 'blu-ray' ) ); ?>
<?php if ($loop->have_posts()){
<div class="bigRedStrip">
        <h2>Available Now!</h2>
</div>

<ul>
    <?php while ( $loop->have_posts() ) : $loop->the_post(); ?>

        <li>
         loop stuff here
        </li>

    <?php endwhile; ?>
</ul>
<?php } ?>

  • WP_Query aún no implementa la countable interfaz.

    – hakré

    24 de marzo de 2012 a las 15:43

  • Gracias, lo acabo de cambiar. +1 de mi parte también.

    – El alfa

    24 de marzo de 2012 a las 15:44


  • La idea era buena por cierto, agregué una solicitud de función: core.trac.wordpress.org/ticket/20296

    – hakré

    24 de marzo de 2012 a las 16:20

¿Ha sido útil esta solución?