Скрыть кнопку отмены между 20-м и 3-м числами месяца (подписки на Woocommerce)

#php #wordpress #woocommerce #woocommerce-subscriptions

Вопрос:

Я работаю над подписками на Woocommerce.

Приведенный ниже код скрывает кнопки «отмена» и «повторная активация», за исключением определенного продукта (идентификатор:1812).

Я хотел бы углубиться и скрыть кнопки «отмена» и «повторная активация» между 20-м и 3-м числами месяца.

Не могли бы вы помочь мне достичь этого?

 /**
 * Remove the "Change Payment Method" button from the My Subscriptions table.
 *
 * This isn't actually necessary because @see eg_subscription_payment_method_cannot_be_changed()
 * will prevent the button being displayed, however, it is included here as an example of how to
 * remove just the button but allow the change payment method process.
 */
function eg_remove_my_subscriptions_button( $actions, $subscription ) {
   $is_my_product = false;
   if ( sizeof( $subscription_items = $subscription->get_items() ) > 0 ) {
     foreach ( $subscription_items as $item_id => $item ) {
         $product = $item->get_product();
         if ( $product->get_id() == 1812 ) {
            $is_my_product = true;
            break;
         }
     }
   }
   if ( $is_my_product ) return $actions;

    foreach ( $actions as $action_key => $action ) {
        switch ( $action_key ) {
            case 'change_payment_method':   // Hide "Change Payment Method" button?
//          case 'change_address':      // Hide "Change Address" button?
//          case 'switch':          // Hide "Switch Subscription" button?
//          case 'resubscribe':     // Hide "Resubscribe" button from an expired or cancelled subscription?
//          case 'pay':         // Hide "Pay" button on subscriptions that are "on-hold" as they require payment?
            case 'reactivate':      // Hide "Reactive" button on subscriptions that are "on-hold"?
            case 'cancel':          // Hide "Cancel" button on subscriptions that are "active" or "on-hold"?
                unset( $actions[ $action_key ] );
                break;
            default: 
                error_log( '-- $action = ' . print_r( $action, true ) );
                break;
        }
    }

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

Спасибо!

Ответ №1:

Вы можете проверить, является ли сегодняшняя дата после 19-го числа текущего месяца или до 4-го числа месяца, как это.

Узнать сегодняшнюю дату:

 date( 'j' )
 

Проверьте, находится ли внутри диапазона $n->$m:

 date( 'j' ) > $n-1 amp;amp; date( 'j' ) < $m 1
 

Окончательно:

 function eg_remove_my_subscriptions_button( $actions, $subscription ) {
   $is_my_product = false;
   if ( sizeof( $subscription_items = $subscription->get_items() ) > 0 ) {
     foreach ( $subscription_items as $item_id => $item ) {
         $product = $item->get_product();
         if ( $product->get_id() == 1812 ) {
            $is_my_product = true;
            break;
         }
     }
   }
   if ( $is_my_product ) return $actions;

   if ( date( 'j' ) > 3 amp;amp; date( 'j' ) < 20 ) return $actions;

    foreach ( $actions as $action_key => $action ) {
        switch ( $action_key ) {
            case 'change_payment_method':   // Hide "Change Payment Method" button?
//          case 'change_address':      // Hide "Change Address" button?
//          case 'switch':          // Hide "Switch Subscription" button?
//          case 'resubscribe':     // Hide "Resubscribe" button from an expired or cancelled subscription?
//          case 'pay':         // Hide "Pay" button on subscriptions that are "on-hold" as they require payment?
            case 'reactivate':      // Hide "Reactive" button on subscriptions that are "on-hold"?
            case 'cancel':          // Hide "Cancel" button on subscriptions that are "active" or "on-hold"?
                unset( $actions[ $action_key ] );
                break;
            default: 
                error_log( '-- $action = ' . print_r( $action, true ) );
                break;
        }
    }

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

Комментарии:

1. Большое спасибо за вашу помощь, но это не работает 🙁 Я попробовал и обнаружил две проблемы : 1/ Кнопка отмены снова появляется для всех продуктов (не только для продукта «1812»). 2/ Я попытался изменить «20» на «14», чтобы проверить, исчезнет ли кнопка отмены, но она все еще здесь.

2. Эй, @AlexisPereira, спасибо за ваши отзывы! Моя проверка даты проводится после проверки вашего идентификатора продукта, поэтому проблема 1/ не должна возникать. До тех пор, пока код этой строки не будет точно таким же, как у вас, так что я удивлен. Работал ли ваш код для отключения в продукте 1812?

3. Что касается вопроса 2/ это странно, я проверю это в своей тестовой среде

4. Я подтверждаю, проблема 2/ не происходит на моем тестовом веб-сайте, кнопка «Отмена» правильно удалена, если я введу, например, » > 3 amp;amp; > Так что в вашей установке есть что-то еще