私はWooCommerceのカスタム投稿タイプ 'product'の中に販売済みアイテムのWooCommerceカテゴリを持っています。私がやろうとしているのは、サイト検索で商品の投稿タイプからの結果のみを返すようにし、販売済みの商品カテゴリも除外するようにすることです。検索からカテゴリを除外するように思われるコードは機能しないようですが、それはCPT内のカテゴリだからだと思います。
私はフィルタリングのために私が持っているコードは(functions.phpに)ちょうど製品のCPTに検索を絞り込みます:
function mySearchFilter($query) {
$post_type = $_GET['type'];
if (!$post_type) {
$post_type = 'product';
}
if ($query->is_search) {
$query->set('post_type', $post_type);
};
return $query;
};
そして私がカテゴリを除外しようとしたコード:
function remove_categories_wp_search($query) {
if ($query->is_search) {
$query->set('cat','-247');
}
return $query;
}
add_filter('pre_get_posts','remove_categories_wp_search');
何か案は?
編集: 私はまた試したialocinの提案に従って:
function wpse188669_pre_get_posts( $query ) {
if (
! is_admin()
&& $query->is_main_query()
&& $query->is_search()
) {
// set your parameters according to
// https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters
$tax_query = array(
// likely what you are after
'taxonomy' => 'sold-gallery',
'operator' => 'NOT IN',
);
$query->set( 'tax_query', $tax_query );
}
}
add_action( 'pre_get_posts', 'wpse188669_pre_get_posts' );
あなたのアプローチの問題は、woocommerces製品カテゴリがproduct_cat
と呼ばれるカスタム分類法であるということです。しかしcat
を使用すると、組み込みカテゴリに対処しています。分類法は tax query で簡単に記述できます。
function wpse188669_pre_get_posts( $query ) {
if (
! is_admin()
&& $query->is_main_query()
&& $query->is_search()
) {
$query->set( 'post_type', array( 'product' ) );
// set your parameters according to
// https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters
$tax_query = array(
array(
// likely what you are after
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => 'sold-gallery',
'operator' => 'NOT IN',
),
);
$query->set( 'tax_query', $tax_query );
}
}
add_action( 'pre_get_posts', 'wpse188669_pre_get_posts' );
iolocin、私はあなたの編集した答えを取り、Pieter Goosenが述べたように、それが配列の中の配列であり、コーデックスに従ってであることを確認しました。最終作業コード
function wpse188669_pre_get_posts( $query ) {
if (
! is_admin()
&& $query->is_main_query()
&& $query->is_search()
) {
$tax_query = array(
'post_type' => 'product',
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => 'sold-gallery',
'operator' => 'NOT IN',
),
),
);
$query->set( 'tax_query', $tax_query );
}
}
add_action( 'pre_get_posts', 'wpse188669_pre_get_posts' );