web-dev-qa-db-ja.com

WP_Queryを使用して検索結果を絞り込む

Codexで と説明されているように、WP_Queryを使用してWorpressの検索結果を修正しようとしています 。その記事で紹介されているスニペットは、Search Template PHPファイルの一番上にあり、すべての結果はそれに応じて表示されています。

私が選んだ引数でWP_Query配列を追加しようとすると、変更されたクエリを作成しようとすると(たとえば、特定の分類法に含まれない、ユーザー検索語を含む投稿)、追加引数は完全に無視され、元の検索が得られます。何度も何度も結果。

以下のコード

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

私もこれを試しましたが、まったく間違っているように感じます。

<?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
);

以下は普通です。

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

コーディングに関してはあまり流暢ではありませんが、CMSとしてのWordpressの癖を自分自身に教えようとしています。私はこのサイトの返事を読みました、しかし私のために使われた方法のどれも私のためにそれをしませんでした。

あなたは私が間違っていることを見ることができますか?ありがとうございます。

1
Egor

検索のための現在のクエリと、追加したい部分をマージするだけで済みます。

私はあなたがメディアと呼ばれるカスタム分類法を持っていて、あなたが検索結果の中で(タグやカテゴリーで見つけられた用語のような)メディアという用語で投稿を特に除外したいと思います

あなたの場合:

$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