web-dev-qa-db-fra.com

Résultats de recherche triés par type d'article

Je travaille sur un site comportant plusieurs types de publication - 4 pour être exact - et j'essaie de configurer la page de résultats de recherche pour filtrer/trier les résultats par type de publication.

Par exemple, quand une personne cherche un terme sur la page avec les résultats, toutes les publications trouvées de tous les types de publication sont affichées, mais en haut, il existe différents liens de noms de types de publication qui trieront les résultats et afficheront uniquement la publication respective. le type de post. À l'heure actuelle, la page des résultats de recherche contient plusieurs boucles pour chaque type de publication, mais lorsque je la teste, toutes les boucles affichent les mêmes résultats, même si chaque boucle contient une requête pour un type de publication différent.

Comment puis-je corriger la boucle afin qu'elle affiche uniquement les résultats de la recherche de ce type de publication? Je ne veux pas avoir différents formulaires de recherche ou réinitialiser la requête et finir par perdre le terme de recherche. Voici une partie du code de la page - http://Pastebin.com/L9zEw1cn

La première boucle est la boucle par défaut qui affichera tous les résultats et la seconde boucle est la boucle que j'essaie d'utiliser pour le reste des types de publication.

Alors, y a-t-il un moyen de corriger la deuxième boucle afin qu'elle affiche uniquement les résultats de la recherche pour ce type de publication?

Toute aide serait grandement appréciée. Merci.

Répondre

2
mygm

Vous pouvez utiliser le filtre posts_clauses Par exemple:

add_filter( 'posts_clauses', 'post_query_order', 20, 1 );
function post_query_order( $pieces )
{
    global $wpdb;
    $pieces['orderby'] = $wpdb->prefix.'posts.post_type ASC';
    return $pieces;
}
1
Vladimir

Dans votre seconde boucle, vous configurez des arguments pour la requête posts, mais vous ne les utilisez nulle part. Vous devez placer query_posts( $args ) avant la deuxième boucle. Vous pouvez également utiliser une fonction get_posts ou WP_Query .

EDIT: à partir de page sur la fonction query_posts sur le codex WordPress :

query_posts () est le moyen le plus simple, mais non préféré et le plus efficace, de modifier la requête par défaut utilisée par WordPress pour afficher les publications. Utilisez query_posts () pour afficher des publications différentes de celles qui seraient normalement affichées à une URL spécifique.

En ce moment, dans votre code, vous parcourez deux fois les mêmes posts. La deuxième boucle est exactement la même que la première.

Maintenant, si vous placez query_posts() avec des arguments différents avant la seconde boucle, comme ceci:

$ args = array ('post_type' => 'videos', 's' => $ s); 
 query_posts ($ args); 
 if (have_posts ()): 
 while (have_posts ()): 
 the_post (); 
 
 // Afficher le message 
 
 à la fin; endif; 
 wp_reset_postdata (); ?>

Vous allez parcourir différentes séries de messages.

0
Mateusz Hajdziony