#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; > Так что в вашей установке есть что-то еще