# wp_trash_post et les annonces expirées : automatiser sans tout supprimer

> Depuis mars 2024, une agence immobilière laissait trop longtemps ses annonces vendues affichées faute d'automatisation. wp_trash_post, appelé depuis une tâche planifiée, met à la corbeille plutôt que de supprimer définitivement.

- Auteur : WordPress Développement
- Publié le : 2024-01-27
- Mis à jour le : 2026-09-30
- Catégorie : Astuces
- URL : https://www.wpmoderne.fr/tips/wp-trash-post-annonces-immobilieres-expirees/

## L’essentiel

- wp_trash_post plutôt que wp_delete_post pour garder un filet de sécurité
- Une tâche planifiée quotidienne vérifie la date de vente déclarée
- La corbeille conserve les annonces trente jours avant suppression définitive

INP a remplacé FID comme signal Core Web Vital en mars 2024, la même période où une agence immobilière de l'ouest de la France m'a contacté pour un tout autre problème : des annonces de biens vendus depuis plusieurs semaines restaient visibles sur le site, simplement parce que personne ne pensait à les retirer manuellement une fois la vente conclue. Le référencement en pâtissait autant que la crédibilité de l'agence auprès des visiteurs qui contactaient l'agence pour un bien déjà indisponible.

La tentation aurait été d'appeler `wp_delete_post()` automatiquement dès la date de vente déclarée, mais une suppression définitive ne laisse aucune marge d'erreur en cas de saisie incorrecte de cette date. `wp_trash_post()`, qui place l'annonce dans la corbeille plutôt que de la supprimer, offre le même effet visible côté public tout en gardant un filet de sécurité de trente jours avant suppression définitive native.

## Vérifier quotidiennement les annonces vendues

Une tâche planifiée s'exécute une fois par jour, cherche les annonces dont la date de vente déclarée est passée et dont le statut reste encore `publish`, puis les bascule en corbeille une par une.

```
add_action( 'ch_verifier_annonces_vendues', function () {
    $annonces = new WP_Query( array(
        'post_type'      => 'annonce',
        'post_status'    => 'publish',
        'meta_query'     => array(
            array(
                'key'     => 'date_vente',
                'value'   => current_time( 'Y-m-d' ),
                'compare' => '<=',
                'type'    => 'DATE',
            ),
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    ) );

    foreach ( $annonces->posts as $annonce_id ) {
        wp_trash_post( $annonce_id );
    }
} );

if ( ! wp_next_scheduled( 'ch_verifier_annonces_vendues' ) ) {
    wp_schedule_event( strtotime( 'tomorrow 03:00' ), 'daily', 'ch_verifier_annonces_vendues' );
}
```

> L'essentiel à retenir : wp_trash_post plutôt que wp_delete_post pour garder un filet de sécurité ; Une tâche planifiée quotidienne vérifie la date de vente déclarée ; La corbeille conserve les annonces trente jours avant suppression définitive

## Pourquoi la corbeille plutôt que la suppression directe

La corbeille de WordPress conserve un article pendant trente jours par défaut, une durée définie par la constante `EMPTY_TRASH_DAYS`, avant sa suppression définitive automatique par une tâche planifiée du cœur lui-même. Ce délai laisse à l'agence une marge pour restaurer une annonce basculée par erreur, par exemple si la date de vente avait été saisie de façon incorrecte lors de la création de la fiche.

```
// wp-config.php : ajuster la durée de conservation si trente jours ne conviennent pas
define( 'EMPTY_TRASH_DAYS', 45 );
```

Restaurer une annonce mise en corbeille par erreur ne demande qu'un clic depuis l'écran de la corbeille en administration, alors qu'une suppression directe aurait nécessité de ressaisir intégralement la fiche, avec le risque de perdre des informations non sauvegardées ailleurs.

## Ne pas confondre la corbeille et l'affichage public

Un point mérite d'être vérifié soigneusement : une annonce en corbeille n'apparaît plus dans les requêtes `WP_Query` par défaut, puisque le statut `post_status` implicite exclut la corbeille des résultats standards. Aucun filtre supplémentaire n'est donc nécessaire côté affichage public pour masquer ces annonces, ce qui simplifie l'ensemble du dispositif.

- Les flux RSS du site n'incluent pas non plus les contenus en corbeille, un comportement natif qui évite toute fuite via ce canal.
- Le plan de site XML généré automatiquement se met à jour dès le passage en corbeille, retirant l'URL de l'annonce vendue de l'indexation future.
- Les liens déjà partagés vers l'annonce renvoient une page introuvable standard, sans message particulier signalant la vente : un choix assumé pour ne pas confirmer publiquement une information commerciale.

## Notifier l'équipe avant la suppression définitive

Trente jours avant suppression définitive laisse peu de visibilité si personne ne surveille la corbeille. Une notification simple, envoyée une semaine avant l'échéance de conservation, rappelle à l'équipe de vérifier qu'aucune information utile ne doit être archivée ailleurs avant disparition complète de la fiche.

```
add_action( 'ch_verifier_annonces_vendues', function () {
    $seuil = strtotime( '-23 days' ); // 30 jours de corbeille moins 7 jours de préavis
    $annonces_bientot_supprimees = get_posts( array(
        'post_type'   => 'annonce',
        'post_status' => 'trash',
        'date_query'  => array( array( 'before' => date( 'Y-m-d', $seuil ) ) ),
    ) );

    if ( ! empty( $annonces_bientot_supprimees ) ) {
        wp_mail( get_option( 'admin_email' ), 'Annonces bientôt supprimées définitivement', sprintf( '%d annonce(s) seront supprimées définitivement d\'ici une semaine.', count( $annonces_bientot_supprimees ) ) );
    }
} );
```

> Une automatisation qui supprime définitivement sans filet de sécurité finit toujours, un jour ou l'autre, par effacer quelque chose qu'on aurait voulu garder.

## Notre verdict

Remplacer `wp_delete_post()` par `wp_trash_post()` dans une tâche planifiée change une seule fonction d'appel, mais transforme une automatisation risquée en automatisation réversible. Ce dispositif ne traite volontairement pas la republication d'une annonce archivée, qui suppose une décision commerciale distincte de la simple gestion technique de la corbeille.
