Mi objetivo aquí es usar múltiples bucles de wordpress para diseñar cada publicación en una categoría determinada por separado. Creo que lo he resuelto en su mayor parte, excepto por la consulta real.

Necesito poder consultar la publicación {MÁS RECIENTE} en una categoría en el primer ciclo, luego en el segundo ciclo consultar la segunda publicación más reciente en una categoría, luego la tercera publicación más reciente en el siguiente ciclo, lo que me permite tener clases y estilos separados para cada uno.

Cualquier ayuda sería increíble +++ !!

<?php if (have_posts()) : ?>
           <?php query_posts('category_name=Main&posts_per_page=1&={MOST RECENT}'); ?>
               <?php while (have_posts()) : the_post(); ?>    

                            <div class="row1">
                                <div class="one">
                                    <div class="post_data">
                                        <div class="icons_right"><img src="pop_out_icon.png" alt="pop out icon" /></div>
                                        <h1 class="post_title"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h1>
                                        <h2 class="post_snippet">Lorem Ipsum Dolar Sit Amet.</h2>
                                        <p class="post_date"><?php the_time('F jS, Y') ?> by <?php the_author_posts_link() ?></p>
                                    </div> <!-- post_data //-->
                                <?php the_content(); ?>
                            </div>  <!-- 1 //-->
               <?php endwhile; ?>

                 <?php query_posts('category_name=Main&posts_per_page=1&={SECOND MOST RECENT}'); ?>
               <?php while (have_posts()) : the_post(); ?>    

                            <div class="row2">
                                <div class="two">
                                    <div class="post_data">
                                        <div class="icons_right"><img src="pop_out_icon.png" alt="pop out icon" /></div>
                                        <h1 class="post_title"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h1>
                                        <h2 class="post_snippet">Lorem Ipsum Dolar Sit Amet.</h2>
                                        <p class="post_date"><?php the_time('F jS, Y') ?> by <?php the_author_posts_link() ?></p>
                                    </div> <!-- post_data //-->
                                <?php the_content(); ?>
                            </div>  <!-- 2 //-->
               <?php endwhile; ?>

     <?php endif; ?>
0
joel dalmas 12 may. 2012 a las 18:21

1 respuesta

La mejor respuesta

Me doy cuenta de que, aunque desea utilizar diferentes bucles para definir clases únicas, sus bloques de bucle son en gran medida los mismos. Si todo lo que quiere hacer es cambiar las clases de sus elementos, no es necesario usar tres bucles separados, ya que eso desordenará su plantilla y terminará siendo mucho más lento que usar un solo bucle.

También debe evitar el uso de query_posts, ya que anula el bucle de Wordpress predeterminado y puede tener consecuencias no deseadas, especialmente si se olvida de restablecer la consulta.

El orden de las publicaciones en el bucle predeterminado es el de las publicaciones más recientes, por lo que no debe preocuparse por establecer los parámetros de orden.

Usando su ejemplo, he reelaborado todo para aplicar clases dinámicas a sus envoltorios dependiendo de cuántas iteraciones haya atravesado el ciclo. Tenga en cuenta que puede usar los atributos de la publicación en sí para definir sus clases y hacerlas únicas (en este caso, se usa el ID de la publicación):

<?php
$count = 0;
$postsPerRow = 4; //<-- This will help set your top wrapper
$query = new WP_Query('category_name=Main&posts_per_page=3');
if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post();
if($count<(floor($query->found_posts/$postsPerRow)*$postsPerRow)){
    $open = !($count%$postsPerRow) ? '<div class="row row-'.(floor($count/$postsPerRow)+1).'">' : '';
    $close = !($count%$postsPerRow) && $count ? '</div>' : '';
    echo $close.$open;
?>    
    <div class="<?php echo "loop-$count post-".get_the_ID(); ?>">
        <div class="post_data">
            <div class="icons_right">
                <img src="pop_out_icon.png" alt="pop out icon" />
            </div>
            <h1 class="post_title">
                <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
            </h1>
            <h2 class="post_snippet">Lorem Ipsum Dolar Sit Amet.</h2>
            <p class="post_date"><?php the_time('F jS, Y') ?> by <?php the_author_posts_link() ?></p>
        </div> <!-- post_data //-->
        <?php the_content(); ?>
    </div>  <!-- 1 //-->
<?php
$count++;
}
endwhile;endif;
echo $count ? '</div>' : ''; //<-- Close row wrapper
?>

ACTUALIZACIÓN: ahora su contenedor superior almacenará 4 publicaciones por fila. Esto se puede ajustar como lo necesite a través de la variable $ postsPerRow, y siempre puede aumentar el parámetro Posts_per_page según sea necesario.

EDICIÓN 2: el uso de WP Query tiene el beneficio adicional de separar valores puede que necesites. Revise el código para obtener una actualización de su última pregunta.

1
marc_s 6 feb. 2016 a las 22:15
Esto definitivamente ayuda, lo configuraré y lo probaré y volveré a esta publicación tan pronto como lo tenga y me pondré en contacto con usted, gracias por su orientación y su arduo trabajo.
 – 
joel dalmas
12 may. 2012 a las 19:36
Bueno, ¡definitivamente me diste una gran ventaja! ¡Muchas gracias! En este punto, es poner una sola publicación en cada fila ... en realidad necesito 4 publicaciones separadas en cada fila, habrá 4 filas en total y luego, si hay publicaciones adicionales después de eso, volverá a la fila 1 y comenzará el bucle sobre? ¡¡¡Gracias!!!
 – 
joel dalmas
12 may. 2012 a las 22:07
Acabo de notar que en mi mensaje original lo tengo repitiendo la fila1 en el segundo ciclo, eso no fue intencional, tenía la intención de mantener las primeras dos publicaciones dentro de la fila 1 y luego hacer que el siguiente grupo de publicaciones aparezca en la fila2, ese fue mi error. pedir disculpas.
 – 
joel dalmas
12 may. 2012 a las 22:10
Revise el código actualizado. Eso debería hacer lo que necesita.
 – 
maiorano84
12 may. 2012 a las 22:33
1
Tu eres el hombre, DOH, entendí mal la consulta, me siento tonto: - \ Soy más un tipo de interfaz de usuario que de php: X muchas gracias por tu ayuda.
 – 
joel dalmas
12 may. 2012 a las 22:45