WooCommerce 如何检查产品是不是有货

Posted

技术标签:

【中文标题】WooCommerce 如何检查产品是不是有货【英文标题】:WooCommerce how to check if the product is in stockWooCommerce 如何检查产品是否有货 【发布时间】:2021-12-04 01:10:21 【问题描述】:

我认为有一个相当简单的解决方案:

在 WooCommerce 中,我想将我的交货时间过滤器应用于单个产品,但前提是它是 available/in stock。在检查任何形式的产品库存时,我都会遇到错误。

function filter_woocommerce_germanized_delivery_time_html( $str_replace, $html )  
    
    global $product;
if( $product->is_in_stock() ) 

        echo '<p class="wc-gzd-additional-info delivery-time-info">';
        echo $str_replace;
        echo '</p>'; 
    echo '<p class="wc-gzd-additional-info"><a href="https://xyz.at/info/lieferzeiten/" target="_blank"><i class="fas fa-shipping-fast"></i> EU-Lieferzeiten</a></p></span>';
    

    
   
         
// add the filter 
add_filter( 'woocommerce_germanized_delivery_time_html', 'filter_woocommerce_germanized_delivery_time_html', 10, 2 );

我也试过了:

if($product->get_stock_quantity()>0) 

但类似的错误如下:

“未捕获的错误:在 null 上调用成员函数 is_in_stock()..”

感谢您的帮助!

问候, 费利克斯

【问题讨论】:

【参考方案1】:

错误是告诉您您在 null 值上使用了您的函数,这意味着它找不到 $product 变量。

不确定这个woocommerce_germanized_delivery_time_html 过滤钩子来自哪里以及您在哪里使用global $product,但您可以使用以下sn-p 来获取产品。

global $post;
$product = wc_get_product($post->ID);

现在您的整个代码将是这样的:

add_filter( 'woocommerce_germanized_delivery_time_html', 'filter_woocommerce_germanized_delivery_time_html', 10, 2 );

function filter_woocommerce_germanized_delivery_time_html($str_replace, $html)


    global $post;

    $product = wc_get_product($post->ID);

    if ($product->is_in_stock()) 

        echo '<p class="wc-gzd-additional-info delivery-time-info">';
        echo $str_replace;
        echo '</p>';
        echo '<p class="wc-gzd-additional-info">';
        echo '<a href="https://xyz.at/info/lieferzeiten/" target="_blank"><i class="fas fa-shipping-fast"></i> EU-Lieferzeiten</a>';
        echo '</p>';
     else
       return $str_replace;
    


或者你可以像这样得到库存数量:

add_filter( 'woocommerce_germanized_delivery_time_html', 'filter_woocommerce_germanized_delivery_time_html', 10, 2 );

function filter_woocommerce_germanized_delivery_time_html($str_replace, $html)


    global $post;

    $stock_quantity = get_post_meta($post->ID, '_stock', true);

    if ($stock_quantity > 0) 

        echo '<p class="wc-gzd-additional-info delivery-time-info">';
        echo $str_replace;
        echo '</p>';
        echo '<p class="wc-gzd-additional-info">';
        echo '<a href="https://xyz.at/info/lieferzeiten/" target="_blank"><i class="fas fa-shipping-fast"></i> EU-Lieferzeiten</a>';
        echo '</p>';
     else 
       return $str_replace;
    


让我知道你是否可以让它工作!

【讨论】:

谢谢你到目前为止的帮助 Ruvee,你的第一个 sn-p 也让我出错,第二个在我将 if ($stock_quantity) 更改为 if ($stock_quantity&gt;0) 后工作,但奇怪的是交货然后时间从购物车视图中的产品中消失。反正我可能把它弄得太复杂了。我从这里hookr.io/filters/woocommerce_germanized_delivery_time_html 得到了钩子,实际上我想做的就是在钩子之后添加一些 html。再次感谢! 嗯,更糟糕的是,我在前端得到了一些奇怪的输出。 没关系,这是意料之中的。这是一个很好的例子,可以在您提出问题时包含尽可能多的信息和上下文。我无法调试我看不到的东西。当你说“一种工作” 不清楚当你说“更打破它”时发生了什么 也不是很清楚,而且太宽泛了。您至少可以提供错误消息吗?或者一些屏幕截图,以便我可以看到发生了什么? 好的,我只是没想到你还想在里面工作,非常感谢!所以用你的第二个 sn-p 我得到这个输出:i.ibb.co/BKfqF13/Bildschirmfoto-2021-10-16-um-15-44-43.png 和卡片中:i.ibb.co/CV0fmvf/Bildschirmfoto-2021-10-16-um-15-44-54.png 但它应该是这样的:i.ibb.co/PjVJQvt/Bildschirmfoto-2021-10-16-um-15-48-35.png (在你以前的版本中一切正常,但在卡片显示的运输消失了) 按照欧盟的规定,必须显示运输时间,包括我到欧盟运输时间的附加链接.. 谢谢,这是迄今为止最好的版本,它除了在卡片视图中还可以正常工作,它只是告诉我没有额外的 EU-shipping-link 的常规运输时间(这是有道理的,因为 else return $str_replace;部分。我会尝试自己解决剩下的问题,也许会回来找你。非常感谢你的帮助。

以上是关于WooCommerce 如何检查产品是不是有货的主要内容,如果未能解决你的问题,请参考以下文章

如何获取产品今天和昨天价格的差异,并找出产品昨天是不是有货?

如何将变体库存状态添加到 Woocommerce 产品变体下拉列表

WooCommerce 订阅 - 检查产品是不是已有活跃订阅者

Woocommerce - 试图在管理员中获得可变产品数量总和

WooCommerce 订阅:检查产品类型是不是为简单订阅

检查是不是在 woocommerce 中应用了任何优惠券代码