Тоже увидел что заказы даже оплаченные начали пропадать, условие упустили. Но еще меня пугает вот эта строчка, я думаю тут ошибка
order_date > date_sub('" . current_time( 'mysql' ) . "', interval $hours hour)"
Просто интервал вообще не срабатывает, и не важно если поставить 2 часа например, оно сработает по крону.
Думаю там должен быть '+'
order_date > date_sub('" . current_time( 'mysql' ) . "' + interval $hours hour)
И еще вопрос как раз по этой теме как сделать например чтоб сработало через 10 минут,
add_action( 'wp', 'rcl_cron_activated' );просто смотрю тут крон подвязан к wp и скорее всего там по стандарту час?
icedesign сказал(а)
Думаю там должен быть '+'
нет там плюсов. документация по функции
icedesign сказал(а)
как раз по этой теме как сделать например чтоб сработало через 10 минут
Вам в документацию wp тогда
Нет чего-то не разберусь чего оно срабатывает не по условию в interval.. добивил фильтр на срабатывание каждые 10 мин.
add_filter( 'cron_schedules', 'cron_add_minute' ); function cron_add_minute( $schedules ) { $schedules['minute'] = array( 'interval' => 600, 'display' => __( '10 minute' ) ); return $schedules; }
Тут тоже переписал
$hours = 10; if ( ! $hours ) return; $orderIds = $wpdb->get_col( "SELECT " . "order_id FROM " . RCL_PREF . "orders " . "WHERE order_status = '1' " . "&& order_date > date_sub('" . current_time( 'mysql' ) . "', interval $hours minute)" );
Для теста даже делал так,
add_action( 'rcl_create_order', 'stm_delete_expired_orders', 10 );
Сразу удаляет товар хотя есть же условие интервал
order_date > date_sub('" . current_time( 'mysql' ) . "', interval $hours minute)
Может быть что мое время в MySQL не совпадает с заказом?
current_time( 'mysql' )
Очень сложно в данном случае, что то подсказать, если учесть, что я вообще не понимаю, что вы делаете.
Если решили завести свой интервал в кроне, то просто зарегистрировать его мало, надо еще событие зарегистрировать, а затем на это событие вешать функция для выполнения. Доведите этот момент до конца, ссылку я давал, внимательнее мануал изучите.
В дополнении ошибку поправил при сравнении времени, строка должны быть такой
order_date < date_sub('" . current_time( 'mysql' ) . "', interval $hours hour)
теперь выборка на удалении будет только тех заказов, которые старше установленного времени
Вот я же говорил что там либо условие было не верно, либо не туда стрелка.. но я убрал резерв товара, теперь вычитает если товар оплачен, а то выходит что не могут купить пока товар не пропадет из оформленных.
насчет крона я просто не весь код скинул:
<?php add_filter( 'cron_schedules', 'cron_add_minute' ); function cron_add_minute( $schedules ) { $schedules['minute'] = array( 'interval' => 600, 'display' => __( '10 minute' ) ); return $schedules; } add_action( 'wp', 'rcl_cron_activated' ); function rcl_cron_activated() { if ( ! wp_next_scheduled( 'rcl_cron_minute_schedule' ) ) { wp_schedule_event( time(), 'minute', 'rcl_cron_minute_schedule' ); } if ( ! wp_next_scheduled( 'rcl_cron_hourly_schedule' ) ) { wp_schedule_event( time(), 'hourly', 'rcl_cron_hourly_schedule' ); } if ( ! wp_next_scheduled( 'rcl_cron_twicedaily_schedule' ) ) { wp_schedule_event( time() + 900, 'twicedaily', 'rcl_cron_twicedaily_schedule' ); } if ( ! wp_next_scheduled( 'rcl_cron_daily_schedule' ) ) { wp_schedule_event( time() + 1800, 'daily', 'rcl_cron_daily_schedule' ); } } add_action( 'rcl_cron_minute_schedule', 'rcl_cron_minute' ); function rcl_cron_minute() { rcl_add_log( __( 'Launch cron events minute', 'wp-recall' ) . ' rcl_cron_minute' ); do_action( 'rcl_cron_minute' ); }