我不想在主页上显示“缺货”产品。 我尝试了一些 WooCommerce Hook 和过滤器来更改产品查询,但它不起作用。 我还在 woocommerce 设置区域选中了“隐藏缺货”。
但产品仍在出现。我能知道发生了什么事吗?
我试过这个过滤器 Hook 来改变主要产品查询:
add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
function custom_pre_get_posts_query( $q ) {
if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;
if ( ! is_admin() ) {
$q->set( 'meta_query', array(array(
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => 'NOT IN'
)));
}
remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
}
我想隐藏缺货产品,但没有任何效果。感谢您的帮助。
最佳答案
要从您的主页中排除“缺货”产品,可以通过不同的方式完成。
1) 使用专用 woocommerce_product_query_meta_query
过滤器钩子(Hook)的元查询:
add_filter( 'woocommerce_product_query_meta_query', 'filter_product_query_meta_query', 10, 2 );
function filter_product_query_meta_query( $meta_query, $query ) {
// On woocommerce home page only
if( is_front_page() ){
// Exclude products "out of stock"
$meta_query[] = array(
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => '!=',
);
}
return $meta_query;
}
2) 使用专用 woocommerce_product_query_tax_query
过滤器 Hook 的税务查询:
add_filter( 'woocommerce_product_query_tax_query', 'filter_product_query_tax_query', 10, 2 );
function filter_product_query_tax_query( $tax_query, $query ) {
// On woocommerce home page only
if( is_front_page() ){
// Exclude products "out of stock"
$tax_query[] = array(
'taxonomy' => 'product_visibility',
'field' => 'name',
'terms' => array('outofstock'),
'operator' => 'NOT IN'
);
}
return $tax_query;
}
代码进入事件子主题(或事件主题)的 functions.php 文件。两者都有效。
相关:Hide out of stock products only on shop archive pages in Woocommerce
关于php - 在 WooCommerce 的主页上隐藏 "out of stock"产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56065860/