Я использую это кодирование, чтобы запретить пользователям создавать заказы в год, и оно работает хорошо. Но я заметил, что если дата создания последнего заказа превышает 365 дней, кодирование принимает ее такой же, как и в этом году, поэтому пользователи, совершившие покупку более чем на 365 дней, не могут покупать снова. Может ли кто-нибудь просмотреть кодировку и внести необходимые изменения? Заранее спасибо!
function new_order_allowed() {
if ( ! ( is_cart() || is_checkout() ) ) return;
if ( is_user_logged_in() ) {
$user_id = get_current_user_id();
$last_order = wc_get_customer_last_order( $user_id );
if ( $last_order ) {
$date_created = $last_order->get_date_created()->format( 'z' ) + 1;
$current_time = current_time( 'z', true ) + 1;
$year_in_day = 365;
$days_passed = $current_time - $date_created;
if ( $days_passed < $year_in_day ) {
wc_add_notice( sprintf( '<b>ONLY ONE PURCHASE IS ALLOWED WITHIN 365 DAYS. </b><br>Your last order was %1$s days ago. Please try again when the 365 day period has been reached. ', $days_passed ), 'error' );
remove_action( 'woocommerce_proceed_to_checkout','woocommerce_button_proceed_to_checkout', 20);
}
}
}
}
add_action( 'woocommerce_check_cart_items', 'new_order_allowed' );
Почему бы вам не сделать это простым способом?
$dateFrom = new DateTime($last_order->get_date_created()->getTimestamp());
$dateTo = new DateTime();
$dateTo->modify('-1 year');
echo $dateFrom->diff($dateTo)->days;
Таким образом $dateFrom->diff($dateTo)->days;
вернет вам количество дней между обеими датами.
Вам не нужно указывать дату вручную: я корректирую ответ без даты вручную.
выдает критическое сообщение об ошибке
Я исправил ошибку и теперь всё работает, вот окончательный код на случай, если кому-то понадобится:
function new_order_allowed() {
if ( ! ( is_cart() || is_checkout() ) ) return;
if ( is_user_logged_in() ) {
$user_id = get_current_user_id();
$last_order = wc_get_customer_last_order( $user_id );
if ( $last_order ) {
$date_created = $last_order->get_date_created()->format( 'U' );
$current_time = current_time( 'U', true );
$year_in_sec = 60 * 60 * 24 * 365;
$seconds_passed = $current_time - $date_created;
$last_order_created = $last_order->get_date_created()->format( 'M d, Y' );
if ( $seconds_passed < $year_in_sec ) {
wc_add_notice( sprintf( '<b>ONLY ONE PURCHASE IS ALLOWED WITHIN 365 DAYS. </b><br>Your last order was on %1$s. Please try again when the 365 day period has been reached. ', $last_order_created, $day_in_sec, $seconds_passed ), 'error' );
remove_action( 'woocommerce_proceed_to_checkout','woocommerce_button_proceed_to_checkout', 20);
}
}
}
}
add_action( 'woocommerce_check_cart_items', 'new_order_allowed' );
Ваш ответ можно улучшить, добавив дополнительную вспомогательную информацию. Пожалуйста, отредактируйте , добавив дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.
если я добавлю дату, как вы предлагаете, мне придется обновить ее вручную в будущем