以编程方式为 WooCommerce 订阅中的购物车项目设置免费试用

问题描述 投票:0回答:2

我正在尝试在添加到购物车 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;

}
php wordpress woocommerce cart subscription
2个回答
0
投票

找到解决方案。 wcs_set_objects_property() 接受第四个参数,不将值保存到数据库,而是将值保留在内存中。然后每次计算购物车总数时调用该函数。


0
投票

wcs_set_objects_property
函数现已弃用,因此更现代的方法是使用
WC()->cart->cart_contents[ $key ]['data']->update_meta_data( 'subscription_trial_length' $job->get_free_trial_length() );
,它按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.