仅显示Woocommerce Recent Products短代码中的“库存”产品

时间:2017-08-30 17:25:15

标签: php wordpress woocommerce shortcode product

在我的首页上使用Woocommerce Recent Products短代码时,我需要排除显示缺货项目。

[recent_products]

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

我已经在网上寻找关于如何解决这个问题的想法,而我根本就没有编码器,但通常我能够坦率地解决这类问题。但是,现在我很难过。所有和任何帮助将不胜感激。

  • 我不能通过WooCommerce设置页面隐藏所有缺货产品,因为它们需要在网站的其他区域中显示。

  • 使用“隐藏”而不是“不拉”缺货产品的代码只显示产品展示的空白区域。

  • 需要在库存水平经常变化时动态运作 - 按产品ID手动限制将花费太长时间。

3 个答案:

答案 0 :(得分:6)

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+上测试并且有效。

答案 1 :(得分:1)

只是一个小小的更新。上述代码适用于简单的产品,但在使用[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);

答案 2 :(得分:0)

在主题的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' );