web-dev-qa-db-ja.com

検索結果のフィルタリング

私は自分のウェブサイトにページ、投稿、そしてウーコマース商品のカテゴリーと商品を持っています。 Wordpressのデフォルトの検索クエリを制限して、投稿、ページ、商品カテゴリだけでなくNOT個々の商品を返すようにします。私はfunctions.phpで以下のコードを使っています。それを使って投稿とページだけを簡単に表示することができます。私が今必要としているのは、検索結果に私の投稿とページと共にウーコマース商品のカテゴリーを表示することですが、個々の商品はNOTです。ここで助けてください。

function searchfilter($query) {

if ($query->is_search && !is_admin() ) {
    $query->set('post_type',array('post','page'));
}

return $query;
}

add_filter('pre_get_posts','searchfilter');

あなたはWoocommerce分類法のtax_queryを含める必要があるかもしれません( 'product_cat'と呼ばれます):

    $tax_query = array(
        array(
            'taxonomy' => 'product_cat'
        ),
    );
    $query->set( 'tax_query', $tax_query );   
}

return $query;
}

ただし、投稿やページ、商品カテゴリを返すことができるようにし、検索結果が混同されることにも注意する必要があります。

Functions.phpレベルでフィルタリングするのではなく、より良い解決策は、検索結果の表示のためにあなたのsearch.phpを適応させることであると私は考えたでしょう。その場合は、次のようにかなりターゲットを絞ることができます。

Posts with this search include:
PostX, PostY, PostZ.

そして次のループ

Pages with this search include:
PageA, PageB, PageC.

そして次のループ

Product Categories with this search include:
Product Cat A, Product Cat F, Product Cat Z.

それはあなたが追求している結果の種類ですか、それともあなたはあなたのサイト上のすべての検索をフィルタリングして結果を混同したいですか?

3
Monkey Puzzle
add_action('pre_get_posts','search_filter_exc_posts');
function search_filter_exc_posts($query) {
    // Verify that we are on the search page & this came from the search form
    if($query->query_vars['s'] != '' && is_search())
    {
        $q_tax_query = $query->query_vars["tax_query"];
        // append product categories to current tax query.
        $query->set('tax_query', $q_tax_query[]=array('taxonomy'=>'product_cat') );
    }
}
0
Emin Özlem