# Move Long-Expired Coupons to the Trash

> Cleans up the coupon list by moving coupons that expired more than 90 days ago to the trash, where you can still restore them.

- Type: PHP
- Runs: On demand
- Category: [WooCommerce](https://wpide.com/library/category/woocommerce/)
- Requires: WooCommerce
- Tags: woocommerce, coupons, cleanup, maintenance
- Author: WPIDE Team
- Installs: 0
- Updated: 2026-10-28
- Page: https://wpide.com/library/woo-trash-expired-coupons/

## Code

```php
$wpide_expired_days = 90; // Only coupons expired at least this long ago.

if ( ! function_exists( 'WC' ) || ( ! current_user_can( 'manage_woocommerce' ) && ! ( defined( 'WP_CLI' ) && WP_CLI ) ) ) {
    return;
}

$wpide_expired = get_posts( array(
    'post_type'      => 'shop_coupon',
    'post_status'    => 'publish',
    'posts_per_page' => 500,
    'fields'         => 'ids',
    'no_found_rows'  => true,
    'meta_query'     => array( // phpcs:ignore WordPress.DB.SlowDBQuery
        array(
            'key'     => 'date_expires',
            'value'   => array( 1, time() - $wpide_expired_days * DAY_IN_SECONDS ),
            'compare' => 'BETWEEN',
            'type'    => 'NUMERIC',
        ),
    ),
) );

foreach ( $wpide_expired as $id ) {
    wp_trash_post( $id );
}

echo esc_html( sprintf( '%d expired coupon(s) moved to the trash.', count( $wpide_expired ) ) );
```

## Notes

Runs only when you press Run in the editor or use WP-CLI, handles up to 500 coupons per run and never deletes permanently.

## How to use it

Install the free WPIDE plugin (https://wordpress.org/plugins/wpide/), find "Move Long-Expired Coupons to the Trash" in its snippet library and add it in one click; or create a new PHP snippet in WPIDE (or any code snippets plugin) and paste the code above. More snippets: https://wpide.com/library/
