Как очистить корзины пользователей по крону WordPress + WooCommerce?

Ссылка скопирована
0 ответов

Есть php код, который выполняет две функции:

1. Изменение статуса заказа на "completed" для всех заказов, которые находятся в статусе "processing". Это делается с помощью функции change_order_status_to_completed(). Эта функция использует WC_Order_Query для получения всех заказов в статусе "processing", а затем обновляет статус каждого заказа на "completed".

2. Очистка корзины пользователя. Функция clear_user_cart() получает список всех пользователей с помощью функции get_users() и затем очищает корзину каждого пользователя с помощью WC()->cart->empty_cart().

Обе функции затем регистрируются как крон-задачи с помощью функции wp_schedule_event(). Это означает, что они будут выполняться автоматически каждый день в 1:00.

function change_order_status_to_completed() {     $orders = wc_get_orders( array(         'status' => 'processing',     ) );          foreach ( $orders as $order ) {         $order->update_status( 'completed' );     } } add_action( 'change_order_status_cron', 'change_order_status_to_completed' );  // Регистрация крон-задачи if ( ! wp_next_scheduled( 'change_order_status_cron' ) ) {     $timestamp = strtotime('today 01:00');     wp_schedule_event( $timestamp, 'daily', 'change_order_status_cron' ); }  function clear_user_cart() {     $users = get_users();          foreach ( $users as $user ) {         $user_id = $user->ID;         $user_cart = WC()->cart->get_cart_for_user( $user_id );                  foreach ( $user_cart as $cart_item_key => $cart_item ) {             WC()->cart->remove_cart_item( $cart_item_key );         }     } } add_action( 'clear_user_cart_cron', 'clear_user_cart' );  // Регистрация крон-задачи if ( ! wp_next_scheduled( 'clear_user_cart_cron' ) ) {     $timestamp = strtotime('today 01:00');     wp_schedule_event( $timestamp, 'daily', 'clear_user_cart_cron' ); }

function change_order_status_to_completed() { $orders = wc_get_orders( array( 'status' => 'processing', ) ); foreach ( $orders as $order ) { $order->update_status( 'completed' ); } } add_action( 'change_order_status_cron', 'change_order_status_to_completed' ); // Регистрация крон-задачи if ( ! wp_next_scheduled( 'change_order_status_cron' ) ) { $timestamp = strtotime('today 01:00'); wp_schedule_event( $timestamp, 'daily', 'change_order_status_cron' ); } function clear_user_cart() { $users = get_users(); foreach ( $users as $user ) { $user_id = $user->ID; $user_cart = WC()->cart->get_cart_for_user( $user_id ); foreach ( $user_cart as $cart_item_key => $cart_item ) { WC()->cart->remove_cart_item( $cart_item_key ); } } } add_action( 'clear_user_cart_cron', 'clear_user_cart' ); // Регистрация крон-задачи if ( ! wp_next_scheduled( 'clear_user_cart_cron' ) ) { $timestamp = strtotime('today 01:00'); wp_schedule_event( $timestamp, 'daily', 'clear_user_cart_cron' ); }

В итоге: крон задачи создаются, статусы заказов меняются в указанное время

Но корзины не очищаются!

Подскажите, что не так в функции clear_user_cart()

Дополнительно:

ВПшный крон работает только в том случае, если в это время кто-то будет обращаться к сайту. Т.е. будет траффик.
Если в час ночи его нет (что наверняка так), то про крон можно забыть.

И вообще для "забытых корзин" есть готовые плагины.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно