以编程方式为 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 订阅订单行项目

在 WooCommerce 中以编程方式收取保存的 Stripe 卡

WooCommerce 中的购物车总数是不是为 0 时未显示付款方式

如何以编程方式删除 Woocommerce 中应用的折扣券?

隐藏订阅价格和详细信息 WooCommerce 免费样品

根据 WooCommerce 中的付款方式提高购物车商品价格