在 WooCommerce 中以编程方式创建可变订阅产品的问题

Issues programmatically creating variable subscription product in WooCommerce

我目前正在开发一个网站,该网站使用 WooCommerce 和各种扩展(所有这些在撰写本文时都是最新的)来显示属于自定义 [=] 的一系列 post 35=]类型。

这些 post 由网站用户使用定制的 ACF 表单在网站前端创建。前端表单在 post 类型 "shwimmer-pools" 中创建一个新的 post 以及两个新产品 - 一个用于订阅,一个用于预订。

这些新 post 的创建是在我们定制的 class ShwimmerFormHandler 中处理的。此 class 在提交池创建表单时触发。您可以在此 Gist 查看 class: https://gist.github.com/mangopearuk/c10c52498547016c6aa23c6cca26fb43

我们面临的问题与订阅产品有关。该产品需要是可变订阅产品,因为池创建者可以设置 6 个不同的价格范围 - 成人、儿童、家庭以及按月或按年订阅。

目前,我们正在使用 wp_insert_post() [第 285 行] 成功创建新的订阅产品,并且我们还在使用 wp_insert_post() [来自第 478 行] 创建每个变体.这些都已成功注册并且正在运行。

我们面临的问题是,当您查看前端订阅购买表格时,价格不正确,并且每当您 select 变体时,就会出现错误消息:"Sorry, this product is unavailable. Please choose a different combination."

在管理员中按 "Update" 后订阅产品按预期工作。关于如何解决此问题的任何想法?

谢谢,安迪

您可能需要触发变量产品同步。

$subscription_id = wp_insert_post( $args );
$product = wc_get_product( $subscription_id );
$product->variable_product_sync();

此外,正如您所发现的(为了完整起见,这里添加了)同步功能在 _price 元中起作用。 _regular_price_sale_price 也进行了比较。 Subscriptions 将其 _subscription_price 设置为 _regular_price,然后 _price_regular_price_sale_price,具体取决于商品是否打折。因此,如果您以编程方式创建订阅,则需要确保设置 _price_regular_price 元数据。

感谢大家的帮助。事实证明,修复起来其实很简单...

订阅插件不显示 _price_regular_price 元字段,但 sync() 函数需要它们。一旦我将这两个附加字段添加到我的 class,sync() 函数就起作用了。