在Woocommerce中仅显示“库存”产品Recent Products shortcode

问题描述:

我需要排除缺货当我的头版使用Woocommerce Recent Products shortcode时显示的项目。在Woocommerce中仅显示“库存”产品Recent Products shortcode

[recent_products] 

是否有可能创造像hide_outofstock="true"或类似的规定停止缺货产品呈现出一个规则?

我已经浏览了网络寻找如何解决这个问题的想法,我根本就没有编码器,但通常我能够frankenstein来解决这样的问题。但是,现在我很难过。所有和任何帮助将不胜感激。

  • 我不能隐藏所有脱销产品通过WooCommerce设置页面,因为他们需要在网站的其他地区可见。

  • 使用“隐藏”而非“不拉”缺货产品的代码仅显示产品已显示的空白空间。

  • 随着库存水平经常变化,需要动态工作 - 通过产品ID手动限制将需要很长时间。

经过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' => 'instock', 
      'compare' => 'LIKE', 
     )); 
    } 
    return $query_args; 
}, 10, 3); 

代码放在您的活动子主题的function.php文件(或主题)或者在任何插件文件中。

在WooCommerce 3+上测试并正常工作。

+0

工作出色!非常感谢你的帮助 :) –

只是一个小小的更新。上面的代码适用于简单的产品,但是使用[recent_products]简码时,库存变化和另一种变种缺货并没有显示。我认为我已经通过改变价值来解决这个问题,并且比较不同意。

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