web-dev-qa-db-fra.com

Comment obtenir toutes les données de publication à partir d'un résultat de recherche paginé?

Disons que je fais une recherche sur mon site et que je reçois 50 posts à la suite. La pagination est définie à 10 messages par page, donc j'ai 5 pages de résultats.

Lorsque je suis sur la première page de résultats, si j'inspecte la var $posts globale, elle me donne des données pour les 10 posts de la page de résultats actuelle uniquement.

Comment puis-je accéder aux données de TOUS les résultats, peu importe la page sur laquelle je suis?

2
mike23

L'ensemble du mécanisme de la boucle est basé sur le fait d'avoir un tableau filtré $ posts. En regardant dans la documentation sur les boucles sur plusieurs boucles , elle donne une explication du code PHP pour le code de boucle standard que vous utilisez:

 <?php if (have_posts()) : ?>
           <?php while (have_posts()) : the_post(); ?>    
           <!-- do stuff ... -->
           <?php endwhile; ?>
 <?php endif; ?>

Les options have_posts () et the_post () sont des wrappers de commodité autour de l'objet global $ wp_query, où se trouve toute l'action. La $ wp_query est appelée dans l'en-tête du blog et les arguments de requête alimentés entrant via GET et PATH_INFO. $ Wp_query prend les arguments, construit et exécute une requête en base de données qui génère un tableau de publications. Ce tableau est stocké dans l'objet et est également renvoyé à l'en-tête du blog où il est inséré dans le tableau global $ posts (pour la compatibilité avec les anciennes boucles de publication).

Have_posts () appelle simplement $ wp_query-> have_posts () qui vérifie un compteur de boucle pour voir s'il reste des publications dans le tableau post. Et the_post () appelle $ wp_query-> the_post () qui fait avancer le compteur de boucles et configure la variable globale $ post ainsi que toutes les données de publication globales. Une fois la boucle épuisée, have_posts () renvoie false et nous avons terminé.

Donc, le $ posts global est connecté à la fonction have_posts. Pour que cela fonctionne correctement, il ne peut contenir que la liste paginée des articles. Notez également que le tableau $ posts n’est là que pour la compatibilité ascendante, il est donc préférable de ne pas y accéder directement.

Il semble donc que vous deviez soit créer votre propre pagination, soit créer un objet séparé avec toutes les publications.

Je suggérerais ce dernier.

2
icc97