Автоматически удаляем просроченные купоны в 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, убедитесь для начала, что он у вас не отключен.