Отложенное автозавершение заказов. Например через 2 дня.

В одном из предыдущих уроков я показывал вам, как при оформлении заказа автоматически присваивать им статус «Выполнен» вместо статуса «Обработка». В этот раз я хочу немного усовершенствовать код и присваивать статусы не сразу, а через некоторое время, через WP_Cron.

Также у меня на сайте есть видеокурс по WooCommerce, рекомендую, вот ссылка.

автовыполнение заказов в WooCommerce
Наша задача, чтобы заказы со статусом «Обработка» автоматически получали статус «Выполнен» через 2 дня.

Ниже – готовый код, который вы можете вставить в functions.php ващей текущей (лучше дочерней) темы либо создать для этого свой плагин.

add_action( 'woocommerce_thankyou', 'truemisha_complete_orders', 25 );
 
function truemisha_complete_orders( $order_id ) {
 
	// time() + 86400 * 2 – через 2 дня
	wp_schedule_single_event( time() + 86400 * 2, 'truemisha_autocomplete_orders', array( $order_id ) );
 
}
 
add_action( 'truemisha_autocomplete_orders', 'truemisha_autocomplete_orders_callback' );
 
function truemisha_autocomplete_orders_callback( $order_id ) {
 
	$order = wc_get_order( $order_id );
 
	if( 'processing' == $order->get_status() ) {
 
		$order->set_status( 'completed', 'Заказ автовыполнен (прошло 2 дня с момента создания)' );
		$order->save();
		// или же без $order->save()
		// $order->update_status( 'completed', 'Заказ автовыполнен (прошло 2 дня с момента создания)' );
 
	}
 
}
  • Как я уже упомянул в начале урока, устанавливать статусы по прошествии какого-то времени мы будем через планировщик WordPress – WP_Cron, про него вы можете почитать у меня в отдельном уроке тут, и про функцию wp_schedule_single_event().
  • На строчке 16 мы дополнительно проверяем, что у заказа всё ещё статус «Обработка» processing, а то мало ли какие изменения могли произойти с ним за два дня.
  • Если для объекта заказа вы используете $order->set_status(), то потом обязательно нужно использовать метод $order->save(), иначе изменения не сохранятся. Альтернативный вариант – использовать $order->update_status().
  • Второй параметр методов $order->set_status() и $order->update_status() – что-то вроде комментария, он будет отображаться в админке на странице заказа, он необязателен.

Миша

Недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

Комментарии — 1

Оставить комментарий

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, если же код – меньше одной строчки, то можно и в <code></code>.