最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

php - Display a specific category of products in shop page and disable code for specific actions

programmeradmin1浏览0评论

I want to display a specific category of products on the top page of the shop page.
This was achieved with the code below.
However, with this code, when searching for products from the search console, only products in the specified category will be searched.
Is it possible to write code that invalidates the code triggered by the search console search action?

add_action('pre_get_posts','shop_filter_cat');

function shop_filter_cat($query) {
if (!is_admin() && is_post_type_archive( 'product' ) && $query->is_main_query()) {
$query->set('tax_query', array(
array ('taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( '#','#'), //
)
)
); 
}
}

I want to display a specific category of products on the top page of the shop page.
This was achieved with the code below.
However, with this code, when searching for products from the search console, only products in the specified category will be searched.
Is it possible to write code that invalidates the code triggered by the search console search action?

add_action('pre_get_posts','shop_filter_cat');

function shop_filter_cat($query) {
if (!is_admin() && is_post_type_archive( 'product' ) && $query->is_main_query()) {
$query->set('tax_query', array(
array ('taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( '#','#'), //
)
)
); 
}
}
Share Improve this question asked Mar 30, 2020 at 2:15 LMDMLMDM 112 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

This seems to be normal behavior since your filter will apply to any query made on post type archive "product". You might be able to deactivate the filter for search query by adding the is_search condition to your filter so your function would look like so:

add_action('pre_get_posts','shop_filter_cat');

function shop_filter_cat($query) {
    if (!is_admin() && is_post_type_archive( 'product' ) && $query->is_main_query() && !is_search()) {
    $query->set('tax_query', array(
        array ('taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => array( '#','#'), //
            )
        )
    ); 
    }
}

Untested. hopefully this will help !

Codex ref: https://developer.wordpress/reference/functions/is_search/

发布评论

评论列表(0)

  1. 暂无评论