以编程方式为 WooCommerce 订阅中的购物车项目设置免费试用
Posted
技术标签:
【中文标题】以编程方式为 WooCommerce 订阅中的购物车项目设置免费试用【英文标题】:Setting free trial programatically for a cart item in WooCommerce Subscriptions 【发布时间】:2019-04-20 21:40:35 【问题描述】:我正在尝试在添加到购物车 AJAX 请求期间在 WooCommerce 中设置购物车项目的免费试用期。当购物车中有一个订阅产品时,该代码似乎可以工作,但当购物车中有两个或多个相同的订阅产品时,免费试用也适用于所有这些产品,即使该代码只是特定的更改其中一种产品的购物车数据。我正在使用的代码如下。另外 $job->get_free_trial_length() 肯定会返回正确的值。任何帮助将不胜感激,因为我已经为此苦苦挣扎了一段时间!谢谢。
更新
在更改购物车项目的免费试用期时,它似乎也更新了订阅产品的免费试用期,这就是其他产品也发生变化的原因。所以我的问题是,可以在购物车项目级别而不是产品级别进行免费试用吗?
/**
* Add the subscription package to the user's cart.
*
* @param int $job_id
* @param int $variation_id
* @return string
*/
function add_package_to_cart( $job_id, $variation_id )
$job = fcrm_get_job( $job_id );
$product_id = $job->get_linked_subscription_product_id();
$quantity = 1;
$cart_item_data = array(
'job_id' => $job_id
);
// Add to cart
$key = WC()->cart->add_to_cart( $product_id, $quantity, $variation_id, array(), $cart_item_data );
// Set the free trial period
wcs_set_objects_property( WC()->cart->cart_contents[ $key ]['data'], 'subscription_trial_length', $job->get_free_trial_length() );
return $key;
【问题讨论】:
【参考方案1】:找到了解决办法。 wcs_set_objects_property() 接受第 4 个参数以不将值保存到数据库,而是将值保存在内存中。然后在每次计算购物车总数时调用该函数。
【讨论】:
我正在尝试做类似的事情并且遇到了同样的问题,我想:如果我将属性设置为一个新值没有 $save 参数,它会更新产品本身,而不是购物车项目。但是,如果我将第四项设置为,例如'set_prop_only',那么它似乎根本没有效果,即购物车中的总数不反映修改后的试用期。代码是否高于您的最终工作代码,如果不是,您介意分享最终代码吗?谢谢! ((related question)以上是关于以编程方式为 WooCommerce 订阅中的购物车项目设置免费试用的主要内容,如果未能解决你的问题,请参考以下文章
在 WooCommerce 中以编程方式收取保存的 Stripe 卡
WooCommerce 中的购物车总数是不是为 0 时未显示付款方式