web-dev-qa-db-fra.com

comment puis-je supprimer les messages d'un WP_Query pour que la pagination soit correcte?

J'utilise un type de message personnalisé et en affiche 20 par page sur la page d'accueil. J'utilise QP_Query.

Un champ personnalisé pour le type de publication personnalisé (appelé mixtapes) est une case à cocher intitulée "non publié" (définie sur true/false), et c’est fondamentalement une publication que je ne souhaite pas inclure dans la boucle.

Jusqu'ici, j'ai mis une condition si à l'intérieur de la boucle while à afficher uniquement si "non publié" n'est pas défini sur "true", mais le problème est que son (évidemment) ne s'applique pas à la boucle elle-même, donc le résultat ... la pagination " voit '40 articles (2 pages) quand vraiment il n'y a qu'un seul album inédit (qui devrait être 1 page, mais 2 pages apparaissent). sur la 2ème page, aucun résultat.

De même, lorsque je veux montrer les "10 meilleurs" albums publiés par ARE, il n’en affiche en réalité que 9 car celui qui n’a pas été publié n’a pas été supprimé de la boucle réelle, mais seulement "caché" conditionnellement après le fait.

Comment puis-je résoudre ce problème afin que la boucle garde la trace des publications supprimées dans une certaine condition custom_field?

Thnkas

1
Tallboy

Plutôt que d'interroger toutes les publications et d'afficher uniquement celles qui correspondent aux critères, recherchez les publications qui correspondent aux critères. WP_Query vous permet de faire exactement cela avec sa méta-clé/méta-valeur les attributs.

Par exemple, pour obtenir des publications dans lesquelles le champ personnalisé unreleased est défini sur 'false', quelque part avant la boucle:

global $wp_query;
$customField = array( 'meta_key' => 'unreleased', 'meta_value' => 'false' );
$args = array_merge( $wp_query->query,$customField);
query_posts( $args );

Ce n'est pas la manière la plus efficace de faire les choses, mais c'est la plus simple. Nous fusionnons la requête méta clé/valeur avec la requête existante (cela inclut les arguments de pagination).

Vous devrez décider si WP_Query et query_posts est la bonne chose à utiliser ici (si c'est et non le requête principale sur la page, vous devriez alors utiliser get_posts - il accepte les mêmes paramètres).

Remarque: Si vous décidez d'utiliser get_posts ou WP_Query (mais pas avec query_posts qui modifie la requête principale ), vous ne devriez pas effectuer de fusion. (Si vous n'êtes pas sûr de ce que vous devriez utiliser, voyez ceci, maintenant officiellement, 'excellente réponse' : D)

2
Stephen Harris