Тоже увидел что заказы даже оплаченные начали пропадать, условие упустили. Но еще меня пугает вот эта строчка, я думаю тут ошибка
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' );
}