pre_get_postsフィルターで$ query-> set( 'tax_query'を使用する方法はありますか?


16

フィルターで使用する方法$query->set('tax_query', ...)はありpre_get_postsますか?たとえば、次のコードはクエリを変更していません。私は$ taxonomiesをカスタム検索から作成していることに注意してください。

function custom_search_filter($query) {
        ...

        // array('taxonomy' => 'category', 'field' => 'id', 'terms' => array( 41,42 ), 'operator' => 'IN')
        $taxonomies = implode(',', $taxonomy_arr);

        // /wordpress/25076/how-to-filter-wordpress-search-excluding-post-in-some-custom-taxonomies

        $taxonomy_query = array('relation' => 'AND', $taxonomies);

        $query->set('tax_query', $taxonomy_query);
    }

    return $query; 
}


add_filter( 'pre_get_posts', 'custom_search_filter', 999 );

前もって感謝します。


1
WP_Queryオブジェクトを引数設定メソッドに渡すのはなぜですか?
t31os

はい、私は間違っていました、今、文字列を配列に変換するためにevalを使用しました(そして、文字列が安全であることを本当に確信しています)。ありがとう。
ホセパブロオロスコマリン

回答:


34

$queryフィルター内の変数はWP_Queryオブジェクトを表すため、WP_Queryそのオブジェクトのプロパティを設定するメソッドに新しいオブジェクトを渡すことはできません。

あなたがからコードをコピー質問誤っフィルターを使用していたが、私はあなたの問題の核心であると感じています。

はい、(または同様の)フィルター/アクションtax_query内で使用できます。pre_get_postsparse_request

例は次のとおり
です。検索クエリのカスタム分類を指定する

function search_filter_get_posts($query) {
    if ( !$query->is_search )
        return $query;

    $taxquery = array(
        array(
            'taxonomy' => 'career_event_type',
            'field' => 'id',
            'terms' => array( 52 ),
            'operator'=> 'NOT IN'
        )
    );

    $query->set( 'tax_query', $taxquery );

}
add_action( 'pre_get_posts', 'search_filter_get_posts' );

6
pre_get_postsアクション内でtax_queryを設定する実用的な例を挙げていただけますか?
ヘルガサビキング

$ tax_queryは、ネストされた配列を含むオブジェクトです。ネストされた配列でオブジェクトをオーバーライドすることはできません。
-AlxVallejo

3
$tax_query$queryただし、オブジェクトではありません(それはのインスタンスですWP_Query)。
-t31os

2
これはtax_queryを完全にオーバーライドしませんか?tax_query argの現在のデータに$ taxqueryを追加すべきではありませんか?
hot_barbara

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.