2

我正在为我的客户建立一个基于会员/订阅的网站,我们正在使用Woocommerce SubscriptionsWoocommerce Memberships插件。

现在的问题是我的客户正在构建一些促销页面,基本上允许用户购买升级。这很好,但我的客户只希望客户(及其相关的会员资格)进行一次独特的订阅。

因此,商定的解决方案是,在购买任何新订阅产品时,应取消所有其他订阅。所有相关的会员资格都已删除/取消,只有最新的订阅才能与其随附的会员资格保持有效。

所以我试图构建这个解决方案,但它只是不起作用,所以任何建议/方向都会受到欢迎。

我试过的:

function wp56908_new_order_housekeeping ($order_id)
{
    $args = array(
        'subscriptions_per_page' => -1,
        'customer_id'            => get_current_user_id(),
    );

    $subscriptions = wcs_get_subscriptions($args);

    foreach ($subscriptions as $subscription) {
        $s_order_id = method_exists( $subscription, 'get_parent_id' ) ? $subscription->get_parent_id() : $subscription->order->id;
        if ($s_order_id != $order_id) {
            $cancel_note = 'Customer purchased new subscription in order #' . $order_id;
            $subscription->update_status( 'cancelled', $cancel_note );
        }
    }
}
add_action( 'woocommerce_thankyou', 'wp56908_new_order_housekeeping',  10, 1  );
4

1 回答 1

0

这是我从 WooCommerce 收到的关于功能问题的支持电子邮件wcs_get_subscriptions()

感谢您联系支持并向我们报告此问题!

我已经在本地安装中尝试过,我确认这似乎是一个错误!我已经向我们的开发团队报告了它,并且补丁应该包含在下一次更新中。到目前为止,如果您真的很着急并且想让它工作,您可以搜索此代码(在 wcs-functions.php 第 483 行中):

// 我们需要将订阅限制为包含特定产品/变体的订阅 if ( ( 0 != $args['product_id'] && is_numeric( $args['product_id'] ) ) || ( 0 != $args[ 'variation_id'] && is_numeric( $args['variation_id'] ) ) { $query_args['post__in'] = wcs_get_subscriptions_for_product( array( $args['product_id'], $args['variation_id'] ) ); }

并将其替换为:

// 我们需要将订阅限制为包含特定产品/变体的订阅 if ( ( 0 != $args['product_id'] && is_numeric( $args['product_id'] ) ) || ( 0 != $args[ 'variation_id'] && is_numeric( $args['variation_id'] ) ) { $prod_args = array( $args['product_id'], $args['variation_id'] ); $prod_args = array_filter($prod_args, function($prod_args) { return ($prod_args !== 0); }); $query_args['post__in'] = wcs_get_subscriptions_for_product( $prod_args ); }

请记住,这不是理想的解决方案,因为您将直接修改我们插件的代码,并且这些更改在更新后可能会丢失,但是如果您对代码感到满意并希望在我们添加之前将风险作为临时解决方法我们插件中的正确补丁,你可以做到。;)

如果您需要任何帮助,请告诉我!

谢谢,伯纳特

于 2018-01-30T01:05:14.587 回答