如果订阅有效期少于3个月,请临时删除“取消”按钮

时间:2019-12-24 06:05:06

标签: wordpress woocommerce woocommerce-subscriptions

我需要一些帮助,以暂时删除“我的帐户”中“我的订阅”页面中的取消按钮。我想隐藏取消按钮,直到用户订阅至少3个月(或90天)为止。订阅3个月后,取消按钮将再次出现。

使用:Woocommerce以及Woo订阅和Woo会员资格

我发现了另一个已回答了这个问题的问题,但是无论我进行多少编辑(Disable Cancel Subscription for single subscription in WooCommerce),我似乎都无法使代码正常工作。 下面的第一段代码来自链接

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;
}

我已经能够在下面的代码中隐藏“取消”按钮,但是它会无限期地隐藏它:

function remove_cancel_button( $actions, $subscription ) {

        foreach ( $actions as $action_key => $action ) {
          switch ( $action_key ) {
            case 'cancel':          // Remove the cancel button
                unset( $actions[ $action_key ] );
                break;
            default: 
                error_log( '-- $action = ' . print_r( $action, true ) );
                break;
          }
        }

        return $actions;
    }
    add_filter( 'wcs_view_subscription_actions', 'remove_cancel_button', 100, 2);

1 个答案:

答案 0 :(得分:2)

我已阅读here中找到的相关开发人员文档,并更改了代码,以便它使用当前站点日期并将其与订阅日期进行比较。

如果差异少于3个月,则取消按钮将一直隐藏,直到差异至少3个月。

请注意,我使用'last_payment'日期进行比较,其他可能使用的选项是'start''trial_end''next_payment''last_payment'或{{1 }}。 进一步了解here

'end'

希望这对您有所帮助,如果有任何不清楚的地方,请告诉我。