在 Woocommerce Recent Products 短代码中仅显示 "in stock" 产品

Display only "in stock" products in Woocommerce Recent Products shortcode

当我的首页上使用 Woocommerce Recent Products 简码时,我需要排除 缺货 项目。

[recent_products]

是否可以创建类似 hide_outofstock="true" 或类似规则的规则来停止显示缺货产品?

我在网上搜索了有关如何解决此问题的想法,我根本不是编码员,但通常我能够通过科学怪人来解决此类问题。但是,现在我很难过。我们将不胜感激所有帮助。

2018 年 6 月更新 (产品类型兼容性)

WC_Shortcodes class 源代码中稍作搜索后,这里是正确的方法:

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' );