在 WooCommerce 3 中更改产品 is_purchasable
Posted
技术标签:
【中文标题】在 WooCommerce 3 中更改产品 is_purchasable【英文标题】:Changing product is_purchasable in WooCommerce 3 【发布时间】:2018-10-02 07:35:48 【问题描述】:在开发将自定义产品添加到购物车的 WooCommerce 插件时,我在 class-wc-cart.php
中使用了函数 add_to_cart
。但是在将 woocomerce 更新到最新版本后,我收到了错误。
抱歉,该产品无法购买。
因为在函数add_to cart
内部,$product_data->is_purchasable()
部分开始返回false
。我调试发现is_purchasable()
返回false的原因是get_price()
函数。因为这个函数返回的价格是空的,所以 woocommerce 告诉我该产品因为空价而无法购买。
产品有价格,可以使用界面添加到购物车。该插件在旧版本的 woocommerce 上运行良好。如果您需要更多数据,请告诉我。
【问题讨论】:
【参考方案1】:您可以在 IF
语句中使用和删除 '' !== $product->get_price()
进行必要的更改,这样:
add_filter( 'woocommerce_is_purchasable', 'customizing_is_purchasable', 20, 2 );
function customizing_is_purchasable( $purchasable, $product )
if( $product->exists() && ( 'publish' === $product->get_status() || current_user_can( 'edit_post', $product->get_id() ) ) )
$purchasable = true;
return $purchasable;
对于产品变体,您也可以同时尝试(未经测试,但应该可以):
add_filter( 'woocommerce_variation_is_visible', 'customizing_variation_is_visible', 20, 4 );
function customizing_variation_is_visible( $visible, $product_id, $parent_id, $product )
if( 'publish' === get_post_status( $product->get_id() ) )
$visible = true;
else
$visible = false;
return $visible;
代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。
【讨论】:
我在class-wc-product-variation
中使用is_purchasable
函数。该函数还检查variation_is_visible
,variation_is_visible
的内容也检查get_price
。所以只连接到is_Purchasable
本身不能工作。我试图通过查看您的代码为variation_is_visible
做同样的事情,但失败了。你能添加这个过滤器吗? (我找不到如何写 if 语句)-> return apply_filters( 'woocommerce_variation_is_visible', 'publish' === get_post_status( $this->get_id() ) && '' !== $this->get_price(), $this->get_id(), $this->get_parent_id(), $this );
非常感谢,但现在该产品以 0 的价格添加到我的购物车中。所以实际上我回到了起点,即“为什么 get_price
返回为空”。因为这是add_to_cart
无法正常工作的根本原因,而is_purchasable
没有返回true。您编辑了我的问题标题,但我不确定这是否反映了问题。你怎么看?
@HOY 我没听懂,因为我在想你在抱怨零价格的产品没有添加到购物车中……你的问题真的措辞不好,有点不清楚……你应该试试详细说明您拥有什么以及您真正想要什么,因为实际上没有人能够帮助您。 对于您最初的问题标题:“添加到购物车不适用于 WooCommerce 3.X.X”非常大,不能反映您的具体问题 ...以上是关于在 WooCommerce 3 中更改产品 is_purchasable的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Woocommerce 中动态更改 PayPal 地址?
如何在 WooCommerce 产品页面中更改 <H1> 标签