Автоматически удаляем просроченные купоны в WooCommerce

Купоны — это круто, кто не любит скидки? Существует много техник по созданию купонов для ваших пользователей, но у WooCommerce есть фатальный недостаток при работе с купонами — он автоматически не удаляет просроченные купоны. Попробуем это исправить.

Откройте functions.php вашей активной темы и добавьте следующий код в конец этого файла:

/**
 * Запланируем ежедневную задачу
 */
function schedule_delete_expired_coupons() {
 if ( ! wp_next_scheduled( 'delete_expired_coupons' ) ) {
 wp_schedule_event( time(), 'daily', 'delete_expired_coupons' );
 }
}
add_action( 'init', 'schedule_delete_expired_coupons' );
 
/**
 * Удалим в корзину просроченные купоны
 */
function delete_expired_coupons() {
 $args = array(
 'posts_per_page' => -1,
 'post_type' => 'shop_coupon',
 'post_status' => 'publish',
 'meta_query' => array(
 'relation' => 'AND',
 array(
 'key' => 'expiry_date',
 'value' => current_time( 'Y-m-d' ),
 'compare' => '<='
 ),
 array(
 'key' => 'expiry_date',
 'value' => '',
 'compare' => '!='
 )
 )
 );
 
 $coupons = get_posts( $args );
 
 if ( ! empty( $coupons ) ) {
 $current_time = current_time( 'timestamp' );
 
 foreach ( $coupons as $coupon ) {
 wp_trash_post( $coupon->ID );
 }
 }
}
add_action( 'delete_expired_coupons', 'delete_expired_coupons' );

Этот сниппет автоматически переместит в корзину все просроченные купоны в вашем магазине. Для окончательного их удаления нужно будет произвести всего один клик — щёлкнуть кнопку «Очистить корзину».

Если вам лень делать клик, то и этот процесс можно автоматизировать, добавив true вторым параметром в функцию wp_trash_post, этим мы скажем удалять купоны в обход корзины:

wp_delete_post( $coupon->ID, true );

Удалённые таким способом купоны невозможно будет восстановить в будущем.

Так как в сниппете используется стандартный крон WordPress, убедитесь для начала, что он у вас не отключен.