在 Woocommerce 最近产品短代码中仅显示“库存”产品

问题描述 投票:0回答:5

当我的首页使用 Woocommerce 最近产品短代码时,我需要排除显示 Out of Stock 商品。

[recent_products]

是否可以创建类似

hide_outofstock="true"
的规则或类似的规则来阻止显示缺货产品?

我在网上寻找如何解决这个问题的想法,我根本不是编码员,但通常我能够像弗兰肯斯坦一样解决这样的问题。然而,现在我很困惑。所有和任何帮助将不胜感激。

  • 我无法通过 WooCommerce 设置页面隐藏所有缺货产品,因为它们需要在网站的其他区域可见。

  • 使用“隐藏”而不是“不拉出”缺货产品的代码只会显示本来应该显示产品的空白区域。

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

php wordpress woocommerce shortcode product
5个回答
12
投票

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
投票

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


1
投票

在主题的

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

0
投票

管理面板 > WooCommerce > 设置 > 产品 > 库存

选中“隐藏目录中缺货的商品”复选框。

答案

您可以使用内置的“隐藏缺货商品”来做到这一点 目录设置,可以在以下位置找到: [your_site]/wp-admin/admin.php?page=wc-settings&tab=products§ion=inventory

启用此设置后,缺货产品将被隐藏 从商店目录以及任何缺货产品的地方 包含在短代码中。


0
投票
  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 ) );
© www.soinside.com 2019 - 2024. All rights reserved.