【问题标题】:Disable Cancel Subscription for single subscription in WooCommerce在 WooCommerce 中禁用单个订阅的取消订阅
【发布时间】:2019-10-21 12:31:54
【问题描述】:

我的 WooCommerce 网站上有 3 个订阅。订阅计划中的 1 个是按月支付的年费。这意味着至少 12 个月的期限,但按月支付。 WooCommerce 本身并不支持这一点。

我想做的是检测用户是否在特定订阅中,如果是,则隐藏取消按钮,直到订阅超过 11 个月。

我在下面发现了这个在所有情况下都隐藏了取消按钮。我正在寻找一种方法来检查订阅是否为 XXX,如果是,请隐藏取消按钮

/**
 * Only copy the opening php tag if needed
 */
function sv_edit_my_memberships_actions( $actions ) {
    // remove the "Cancel" action for members
    unset( $actions['cancel'] );
    return $actions;
}
add_filter( 'wc_memberships_members_area_my-memberships_actions', 'sv_edit_my_memberships_actions' );
add_filter( 'wc_memberships_members_area_my-membership-details_actions', 'sv_edit_my_memberships_actions' );

【问题讨论】:

    标签: wordpress woocommerce


    【解决方案1】:

    首先,您需要枚举用户当前的活动订阅并检测我们将使用 wc_memberships_get_user_active_memberships 过滤的订阅,并将开始日期与当前日期进行比较。我提供了一段可能对您有所帮助的代码:)

    function sv_edit_my_memberships_actions( $actions ) {
            // Get the current active user
            $user_id = wp_get_current_user();
    
            if(!$user_id) // No valid user, abort
                return $actions;
    
            // Only query active subscriptions
            $memberships_info = wc_memberships_get_user_active_memberships($user_id, array( 
                'status' => array( 'active' ),
            ));
    
            // Loop through each active subscription
            foreach ($memberships_info as $membership) {
                $subscription_start_date = date("Y/m/d", strtotime($membership->get_start_date()));
                //$subscription_end_date = date("Y/m/d", strtotime($membership->get_end_date()));
                //$subscription_name = $membership->get_plan()->get_name();
                //$subscription_id = $membership->get_plan()->get_id();
    
                if($subscription_id == 'YOUR_ID') { // Active subscription
                    // Compare the starting date of the subscription with the current date
                    $datetime1 = date_create($subscription_start_date);
                    $datetime2 = date_create(date(time()));
    
                    $interval = date_diff($datetime1, $datetime2);
    
                    if($interval->format('%m') <= 11) {
                        // remove the "Cancel" action for members
                        unset( $actions['cancel'] );
                    }
                }
            }
           return $actions;
        }
    
        add_filter( 'wc_memberships_members_area_my-memberships_actions', 'sv_edit_my_memberships_actions' );
        add_filter( 'wc_memberships_members_area_my-membership-details_actions', 'sv_edit_my_memberships_actions' );
    

    【讨论】:

    • 我似乎无法让这段代码工作。如果需要,我已经可以用我的代码删除取消按钮,但需要你的功能
    猜你喜欢
    • 2019-07-19
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2014-06-30
    • 1970-01-01
    • 2017-12-03
    相关资源
    最近更新 更多