当我的首页使用 Woocommerce 最近产品短代码时,我需要排除显示 Out of Stock 商品。
[recent_products]
是否可以创建类似
hide_outofstock="true"
的规则或类似的规则来阻止显示缺货产品?
我在网上寻找如何解决这个问题的想法,我根本不是编码员,但通常我能够像弗兰肯斯坦一样解决这样的问题。然而,现在我很困惑。所有和任何帮助将不胜感激。
我无法通过 WooCommerce 设置页面隐藏所有缺货产品,因为它们需要在网站的其他区域可见。
使用“隐藏”而不是“不拉出”缺货产品的代码只会显示本来应该显示产品的空白区域。
需要动态工作,因为库存水平经常变化 - 按产品 ID 手动限制将花费太长时间。
2018 年 6 月更新 (针对产品类型兼容性)
在
WC_Shortcodes
类源代码中进行一些搜索后,这是正确的方法:
add_filter( 'woocommerce_shortcode_products_query', function( $query_args, $atts, $loop_name ){
if( $loop_name == 'recent_products' ){
$query_args['meta_query'] = array( array(
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => 'NOT LIKE',
) );
}
return $query_args;
}, 10, 3);
代码位于活动子主题(或主题)的 function.php 文件中,或者也位于任何插件文件中。
在 WooCommerce 3+ 上测试并有效。
只是一个小更新。上面的代码适用于简单的产品,但使用 [recent_products] 短代码时,不会显示一种有库存的变体和另一种缺货的变体。我想我已经通过将值更改为 outofstock 并与 NOT LIKE 进行比较来解决此问题。
add_filter( 'woocommerce_shortcode_products_query', function( $query_args, $atts, $loop_name ){
if( $loop_name == 'recent_products' ){
$query_args['meta_query'] = array( array(
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => 'NOT LIKE',
) );
}
return $query_args;
}, 10, 3);
在主题的
functions.php
文件中添加以下代码,
function custom_woocommerce_shortcode_products_query( $args ) {
if ( 'yes' == get_option( 'woocommerce_hide_out_of_stock_items' ) ) {
$args['meta_query'][] = array(
'key' => '_stock_status',
'value' => 'instock',
'compare' => 'IN'
);
}
return $args;
}
add_filter( 'woocommerce_shortcode_products_query', 'custom_woocommerce_shortcode_products_query' );
管理面板 > WooCommerce > 设置 > 产品 > 库存
选中“隐藏目录中缺货的商品”复选框。
原答案:
您可以使用内置的“隐藏缺货商品”来做到这一点 目录设置,可以在以下位置找到: [your_site]/wp-admin/admin.php?page=wc-settings&tab=products§ion=inventory
启用此设置后,缺货产品将被隐藏 从商店目录以及任何缺货产品的地方 包含在短代码中。
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);
add_action( 'woocommerce_before_single_product_summary', 'woocommerce_output_related_products', 25);
function woocommerce_output_related_products(){
$args = array(
'posts_per_page' => 4,
'columns' => 4,
'orderby' => 'rand'
);
$args['meta_query'][] = array(
'key' => '_stock_status',
'value' => 'instock',
'compare' => 'IN'
);
woocommerce_related_products( apply_filters( 'woocommerce_output_related_products_args', $args ) );