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>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 订阅 - 检查产品是不是已有活跃订阅者