Si tengo un bucle que se ejecuta desde una consulta de categoría como:
<?php $the_query = new WP_Query('cat=1&showposts=50&orderby=title&order=asc');?>
<ul>
<?php while ($the_query->have_posts()) : $the_query->the_post();?>
<li>.. </li><?php wp_reset_query(); ?>
<?php endwhile; ?>
</ul>
¿Cómo crearía una cláusula if que rompa la lista en un intervalo determinado y comience una nueva? Entonces, por ejemplo, en la décima publicación, devuelve ay </ul>
comienza una nueva <ul>
a las 11.
Esto es incorrecto pero para ilustrar mi objetivo:
<?php $count =0;
while($count <=50){
if ($count == 9){
echo "<li><a href='<?php the_permalink(); ?>'>
<?php the_title(); ?></a></li></ul>";
}
elseif ($count == 10){
echo "<ul><li><a href='<?php the_permalink(); ?>'>
<?php the_title(); ?></a></li>";
}
else {
echo "<li><a href='<?php the_permalink(); ?>'><?php the_title(); ?></a></li>";
}
¿Cuál es la forma correcta de incluir esta lógica en el bucle?
Respuestas:
Cree columnas para su consulta y visualización fácil
En los temas, probablemente sea más útil tener algo que se ajuste bien a las etiquetas de plantilla y al bucle. Mi primera respuesta no se centró tanto en eso. Además, pensé que es un poco demasiado complicado para una adopción rápida.
Un enfoque más fácil que se me ocurrió fue extender "el bucle" con columnas y llegar a esta solución hasta ahora:
Un objeto WP_Query_Columns "extiende" cualquier consulta WP estándar con columnas que se puedan iterar fácilmente. El primer parámetro es la variable de consulta y el segundo parámetro es el número de elementos que se mostrarán por columna:
Para usarlo, simplemente agregue la clase WP_Query_Columns de esta esencia a sus temas function.php.
Uso avanzado
Si necesita el número de columna que está mostrando actualmente (por ejemplo, para algunas clases CSS pares / impares, también puede obtenerlo desde el foreach:
Y el número total de columnas también está disponible:
Vigésimo ejemplo
Podría hackear rápidamente el tema de veinte diez para una prueba y agregar encabezados sobre cualquier bucle de esta manera. Se inserta en loop.php, el comienzo es el código del tema:
Para una respuesta más larga:
(así es básicamente como llegué a las cosas anteriores, pero explica mejor cómo realmente resolver el problema con operaciones matemáticas simples. Mi nueva solución es iterar sobre algo precalculado).
Depende un poco de cuánto necesites realmente para resolver el problema.
Por ejemplo, si el número de elementos por columna es igual a uno, esto es muy simple:
Incluso con ese código simple, se puede ver que hay que tomar múltiples decisiones:
La última pregunta es bastante interesante para la salida HTML, ya que probablemente desee incluir no solo elementos sino también la columna con elementos html.
Afortunadamente con el código, podemos establecer todo esto en variables y crear código que siempre calcule según nuestras necesidades.
Y a veces incluso, ni siquiera podemos responder todas las preguntas desde el principio. Por ejemplo, el recuento del total de elementos: ¿hay alguno, algunos, múltiples, un recuento exacto que coincida con un número entero de columnas en total?
Incluso la respuesta de Jan Fabry podría funcionar en algunos casos (como lo hace mi ejemplo anterior para el escenario de un elemento por columna), es posible que le interese algo que funcione para cualquier cantidad de elementos devueltos por WP_Query.
Primero para las matemáticas:
Ese código no se ejecuta, así que pongámoslo en un ejemplo de texto simple
Esto realmente se ejecuta y ya produce algunos resultados:
Esto ya simula bastante bien cómo podría verse en una plantilla de WordPress:
(No he ejecutado el último ejemplo en un entorno WP, pero debería ser al menos sintácticamente correcto).
fuente
Esta es más una pregunta de programación general, pero aquí está la idea básica:
fuente
wp_reset_query();
no está relacionado con la variable $ the_query. Esto no es necesario en absoluto, ¿verdad?$the_query->the_post()
sobrescribirá la$post
variable global y lawp_reset_query()
restaurará (llamandowp_reset_postdata()
, ¿qué también podría ser suficiente por sí solo?).$wp_query
pero$the_query
se usó en el ejemplo. Sin embargo, me equivoqué, lo agregaré a mi segunda respuesta para completar.<ul></ul>
.No hay necesidad de crear un var separada para contar, como la consulta var ya cuenta en:
$wp_query->current_post
. Además, debe tener en cuenta la entrada final en la lista para no tener vacíos<ul></ul>
en su marcado.fuente
WP_Query
también tiene una$post_count
variable, puede usar eso en lugar decount($the_query->posts)
. Zac, puedes "no aceptar" mi respuesta y aceptar otra si resuelve mejor tu problema.Agregue la
get_columns_array()
función a su function.php. Luego puede iterar fácilmente sobre sus columnas:Luego, en su tema, cada foreach recorre las columnas:
Establezco el tamaño predeterminado de una columna en 10. Puede usar el segundo parámetro para establecer el tamaño de una columna por su cuenta. Al igual que para el 7:
get_columns_array($post_count, 7);
.fuente
Aquí hay otro enfoque que puede tomar:
fuente