在 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_visiblevariation_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:还在购物车项目上显示产品变体描述

如何使用 WooCommerce 更改每行的产品类别数

如何在 Woocommerce 中动态更改 PayPal 地址?

如何在 WooCommerce 产品页面中更改 <H1> 标签

用 WooCommerce 3 中选择的变化价格替换可变价格范围

如何在 WordPress 网站中更改 WooCommerce 产品图像大小?