从产品类别中排除最近查看的产品小部件中的 Woocommerce 产品
Posted
技术标签:
【中文标题】从产品类别中排除最近查看的产品小部件中的 Woocommerce 产品【英文标题】:Exclude Woocommerce products in recently viewed products widget from a product category 【发布时间】:2019-07-15 18:05:51 【问题描述】:我正在尝试弄清楚如何从 Woocommerce 中最近查看的产品小部件中排除某个类别中的产品。
我知道可以使用以下代码从商店页面中删除/隐藏某个类别中的产品
function custom_pre_get_posts_query( $q )
$tax_query = (array) $q->get( 'tax_query' );
$tax_query[] = array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'machine' ), // Don't display products in the machine category on the shop page.
'operator' => 'NOT IN'
);
$q->set( 'tax_query', $tax_query );
add_action( 'woocommerce_product_query', 'custom_pre_get_posts_query' );
我想知道如何将“机器类别”中的产品排除在最近查看的产品小部件中。 (我正在使用搜索自动建议商店中可用的产品,它允许用户查看从存档页面/类别页面隐藏的产品),所以我想从最近查看的产品小部件中排除产品如果用户能够通过搜索访问产品。
我已使用此代码将某个类别中的产品排除在搜索结果中,这可以正常工作,但问题是自动建议仍然可以显示从查询中排除/隐藏的产品
function hello_pre_get_posts( $query )
if ( $query->is_search() )
$query->set( 'post_type', array( 'product' ) );
$tax_query = array( array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => 'machine',
'operator' => 'NOT IN',
),
);
$query->set( 'tax_query', $tax_query );
add_action( 'pre_get_posts', 'hello_pre_get_posts' );
对于如何从“最近查看的产品”小部件中排除查看的产品的帮助将不胜感激。
【问题讨论】:
【参考方案1】:你需要使用woocommerce_recently_viewed_products_widget_query_args
dedicated filter hook:
// Exclude products in recently viewed products widget from "machine" product category
add_filter( 'woocommerce_recently_viewed_products_widget_query_args', 'custom_recently_viewed_products_widget_query_args', 10, 1 );
function custom_recently_viewed_products_widget_query_args( $args )
$args['tax_query'][] = array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'machine' ),
'operator' => 'NOT IN',
);
return $args;
代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。
【讨论】:
应用和工作!!!最有趣的事情是我尝试过这样的事情,但我想优先级和参数有很大的作用,因为当我在this page 的第 82 行看到过滤器后早些时候使用它时。它完全删除了小部件,但现在类别机器中的产品不再显示......谢谢@LoicTheAztec 我在我尝试的代码中丢失了return $args;
,这导致整个小部件消失
@KolawoleEmmanuelIzzy 过滤钩子总是需要从钩子函数返回第一个参数,因为它们过滤它......
@LoicTheAztec 是否也可以为畅销书做到这一点?还是该插件是特定的(WooCommerce 产品轮播、滑块和 Grid Ultimate Pro)?
@Lyall 可能正在使用 woocommerce_products_widget_query_args 钩子...以上是关于从产品类别中排除最近查看的产品小部件中的 Woocommerce 产品的主要内容,如果未能解决你的问题,请参考以下文章
在WooCommerce产品类别窗口小部件侧边栏中显示产品数量
从 WooCommerce 中的类别价格后缀更改中排除特定产品 ID