Si j'ai une boucle exécutée à partir d'une requête de catégorie comme:
<?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>
Comment créer une clause if qui casse la liste à un certain intervalle et en démarre une nouvelle. Ainsi, par exemple, au 10e poste, retournez un </ul>
et commencez un nouveau <ul>
à 11.
C'est incorrect mais pour illustrer mon objectif:
<?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>";
}
Quelle est la bonne façon d'inclure cette logique dans la boucle?
Réponses:
Créez des colonnes pour votre requête et un affichage facile
Dans les thèmes, il est probablement plus utile d'avoir quelque chose qui s'intègre bien dans les balises de modèle et la boucle. Ma première réponse ne s'est pas concentrée sur tant de choses. De plus, je pensais que c'était un peu trop compliqué pour une adoption rapide.
Une approche plus facile qui m'est venue à l' esprit était d'étendre "la boucle" avec des colonnes et est arrivée à cette solution jusqu'à présent:
Un objet WP_Query_Columns "étend" toute requête WP standard avec des colonnes qui peuvent être facilement itérées. Le premier paramètre est la variable de requête et le second paramètre est le nombre d'éléments à afficher par colonne:
Pour l'utiliser, il vous suffit d'ajouter la classe WP_Query_Columns de cet essentiel à vos thèmes function.php.
Utilisation avancée
Si vous avez besoin du numéro de colonne que vous affichez actuellement (par exemple pour certaines classes CSS paires / impaires, vous pouvez également l'obtenir auprès de foreach:
Et le nombre total de colonnes est également disponible:
Vingt-dix exemple
Je pourrais rapidement pirater vingt-dix thèmes pour un test et ajouter des titres au-dessus de n'importe quelle boucle de cette façon. Il est inséré dans loop.php, le début est le code du thème:
Pour une réponse plus longue:
(c'est essentiellement comme cela que je suis arrivé aux choses ci-dessus, mais explique mieux comment résoudre réellement le problème avec des opérations mathématiques simples. Ma nouvelle solution est d'itérer sur quelque chose de pré-calculé.)
Cela dépend un peu de ce dont vous avez réellement besoin pour résoudre le problème.
Par exemple, si le nombre d'éléments par colonne est égal à un, c'est très simple:
Même avec ce code simple, on peut voir qu'il y a plusieurs décisions à prendre:
La dernière question est assez intéressante pour la sortie HTML car vous voulez probablement inclure non seulement des éléments mais aussi la colonne avec des éléments html.
Heureusement avec le code, nous pouvons définir tout cela dans des variables et créer du code qui calcule toujours selon nos besoins.
Et parfois même, nous ne pouvons même pas répondre à toutes les questions depuis le début. Par exemple, le nombre total d'éléments: y a-t-il, certains, plusieurs, un nombre exact qui correspond à un nombre entier de colonnes au total?
Même la réponse de Jan Fabry peut fonctionner dans certains cas (comme mon exemple ci-dessus pour le scénario d'un élément par colonne), vous pourriez être intéressé par quelque chose qui fonctionne pour n'importe quel nombre d'éléments retournés par WP_Query.
D'abord pour les mathématiques:
Ce code ne s'exécute pas, nous allons donc mettre cela dans un exemple de texte simple
Cela fonctionne et fait déjà une sortie:
Cela simule déjà assez bien à quoi cela pourrait ressembler dans un modèle wordpress:
(Je n'ai pas exécuté le dernier exemple dans un environnement WP, mais il devrait être au moins syntaxiquement correct.)
la source
Il s'agit plus d'une question de programmation générale, mais voici l'idée de base:
la source
wp_reset_query();
n'est pas lié à la variable $ the_query. Ce n'est pas du tout nécessaire, non?$the_query->the_post()
écrasera la$post
variable globale et lawp_reset_query()
restaure (en appelantwp_reset_postdata()
- ce qui pourrait également suffire à lui seul?).$wp_query
mais a$the_query
été utilisé dans l'exemple. Cependant, j'avais tort, je vais l'ajouter à ma deuxième réponse pour être complet.<ul></ul>
.Il n'y a pas besoin de créer un var distinct pour le comptage, comme la requête var compte déjà à l' adresse:
$wp_query->current_post
. En outre, vous devez tenir compte de l'entrée finale dans la liste afin de ne pas avoir de vide<ul></ul>
dans votre balisage.la source
WP_Query
également une$post_count
variable, vous pouvez l'utiliser à la place decount($the_query->posts)
. Zac, vous pouvez "refuser" ma réponse et en accepter une autre si elle résout mieux votre problème.Ajoutez la
get_columns_array()
fonction à votre function.php. Vous pouvez ensuite parcourir facilement vos colonnes:Dans votre thème, vous passez ensuite chaque boucle sur les colonnes:
J'ai défini la taille par défaut d'une colonne sur 10. Vous pouvez utiliser le deuxième paramètre pour définir la taille d'une colonne par vous-même. Comme à 7:
get_columns_array($post_count, 7);
.la source
Voici une autre approche que vous pouvez adopter:
la source