web-dev-qa-db-fra.com

Affiner les résultats de la recherche à l'aide de WP_Query

J'essaie de modifier (affiner?) Les résultats de recherche Worpress en utilisant WP_Query, comme il est expliqué dans le Codex . L'extrait présenté dans cet article se trouve en haut du fichier de modèle de recherche PHP et tous les résultats s'affichent en conséquence.

Lorsque j'essaie d'ajouter le tableau WP_Query avec les arguments de mon choix et de créer une requête modifiée (par exemple, les posts contenant des recherches d'utilisateurs à terme, non incluses dans une certaine taxonomie), WP_Query ignore complètement les arguments ajoutés et me donne la recherche d'origine. résultats encore une fois.

Code ci-dessous:

$search = new WP_Query(array( 'taxonomy' => 'media', 'field' => 'image', 'operator' => 'NOT IN'));

J'ai aussi essayé de cette façon, mais j'ai le sentiment que c'est complètement faux:

<?php
global $query_string;
$query_args = explode("&", $query_string);
$search_query = array();
foreach($query_args as $key => $string) {
    $query_split = explode("=", $string);
    $search_query[$query_split[0]] = urldecode($query_split[1]);
} // foreach
$args = array(
        'tax_query' => array(
        array(
            'taxonomy' => 'media',
            'field' => 'slug',
            'terms' => 'media',
            'operator' => 'NOT IN'
        )
    ),
    $search_query
);

Ce qui suit est l'habituel:

if ( $search->have_posts() ) :
    while ($search->have_posts() ) : $search->the_post(); ?>

Je ne maîtrise pas très bien la programmation, mais j'essaie d'apprendre moi-même les particularités de Wordpress en tant que système de gestion de contenu. J'ai lu les réponses sur ce site, mais aucune des méthodes utilisées ne l'a fait pour moi.

Pouvez-vous voir ce que je fais mal? Merci!

1
Egor

Vous devez simplement fusionner la requête en cours pour la recherche avec la partie que vous souhaitez ajouter et que vous êtes sur le point de faire.

Je suppose que vous avez une taxonomie personnalisée appelée média et que vous souhaitez spécifiquement laisser de côté les posts avec le terme média (comme un terme trouvé dans une étiquette ou une catégorie) dans les résultats de la recherche.

Dans ton cas:

$custom_query = array();
$custom_query['tax_query'][] = array( 'taxonomy' => 'media', 'terms' => array('media'), 'field' => 'slug', 'operator' => 'NOT IN' );

$args = array_merge( $wp_query->query, $custom_query );
query_posts( $args );
3
Seagyn Davis