# Transformer un brouillon en page de destination prête à l’emploi, en un clic

> Appliquer un modèle épuré et retirer les éléments superflus d'une page, menus compris, redevient une action ponctuelle plutôt qu'une série de réglages manuels.

- Auteur : Clément Hadrot
- Publié le : 2025-04-12
- Mis à jour le : 2025-04-12
- Catégorie : Tips
- URL : https://wpmoderne.dev.wordpress-developpement.fr/tips/transformer-brouillon-page-destination-prete-emploi/

## L’essentiel

- Une action de menu personnalisée dans la liste des pages
- Changement du modèle via la meta _wp_page_template
- Retrait automatique des emplacements de menu associés

Une agence événementielle créait régulièrement des pages de destination ponctuelles pour chaque salon professionnel auquel son client participait : une page sans en-tête ni menu de navigation, entièrement dédiée à un formulaire d'inscription. Le chargé de communication répétait à chaque nouveau salon la même série de manipulations manuelles : changer le modèle de page, retirer la page du menu principal si elle y avait été ajoutée par erreur, et vérifier qu'aucun widget de la barre latérale ne s'affichait.

Plutôt que de documenter cette procédure dans un guide que personne ne relit, une action personnalisée ajoutée directement dans la liste des pages a permis de regrouper ces réglages en un seul clic, déclenché sur un brouillon existant.

## Ajouter l'action personnalisée dans la liste

Le filtre `page_row_actions` permet d'ajouter un lien d'action sous le titre de chaque page, aux côtés de « Modifier » et « Voir » :

```
add_filter( 'page_row_actions', function ( $actions, WP_Post $page ) {
    if ( 'draft' !== $page->post_status ) {
        return $actions;
    }

    $lien = wp_nonce_url(
        admin_url( 'admin-post.php?action=agence_transformer_landing&page_id=' . $page->ID ),
        'agence_transformer_landing_' . $page->ID
    );

    $actions['transformer_landing'] = '<a href="' . esc_url( $lien ) . '">Transformer en page de destination</a>';

    return $actions;
}, 10, 2 );
```

## Traiter l'action : modèle, menus, widgets

> L'essentiel à retenir : Une action de menu personnalisée dans la liste des pages ; Changement du modèle via la meta _wp_page_template ; Retrait automatique des emplacements de menu associés

```
add_action( 'admin_post_agence_transformer_landing', function () {
    $page_id = (int) ( $_GET['page_id'] ?? 0 );

    check_admin_referer( 'agence_transformer_landing_' . $page_id );

    if ( ! current_user_can( 'edit_page', $page_id ) ) {
        wp_die( 'Action non autorisée.' );
    }

    // 1. Appliquer le modèle de page épuré, déclaré par le thème
    update_post_meta( $page_id, '_wp_page_template', 'templates/page-destination.php' );

    // 2. Retirer la page de tous les emplacements de menu où elle apparaîtrait
    agence_retirer_page_des_menus( $page_id );

    // 3. Marquer la page comme "page de destination" pour d'éventuels filtres d'affichage
    update_post_meta( $page_id, '_est_page_destination', '1' );

    wp_safe_redirect( admin_url( 'post.php?post=' . $page_id . '&action=edit&transformation=ok' ) );
    exit;
} );
```

### Retirer la page de tous les menus existants

Un salon professionnel se prépare parfois plusieurs mois à l'avance, et il arrive qu'une page provisoire ait été ajoutée par erreur à un menu pendant sa préparation. La fonction ci-dessous parcourt tous les menus enregistrés et retire tout élément qui pointerait vers cette page :

```
function agence_retirer_page_des_menus( int $page_id ) {
    $menus = wp_get_nav_menus();

    foreach ( $menus as $menu ) {
        $elements = wp_get_nav_menu_items( $menu->term_id );

        if ( ! $elements ) {
            continue;
        }

        foreach ( $elements as $element ) {
            if ( 'post_type' === $element->type
                && 'page' === $element->object
                && (int) $element->object_id === $page_id ) {
                wp_delete_post( $element->ID, true );
            }
        }
    }
}
```

On supprime ici l'élément de menu lui-même (qui est un post de type `nav_menu_item`), pas la page : c'est une distinction importante, une erreur fréquente étant de confondre l'entrée de menu et le contenu qu'elle référence.

## Exploiter le marqueur côté template

La meta `_est_page_destination` posée à l'étape trois sert ensuite dans le thème pour désactiver l'affichage de la barre latérale ou de tout widget non pertinent sur ce type de page, même si un futur réglage du thème venait à les réactiver globalement :

```
add_filter( 'agence_afficher_barre_laterale', function ( $afficher ) {
    if ( is_page() && get_post_meta( get_the_ID(), '_est_page_destination', true ) ) {
        return false;
    }

    return $afficher;
} );
```

## Prévoir le chemin inverse

Une bonne pratique complémentaire, ajoutée après les premiers retours d'usage : permettre de revenir à un modèle de page standard si la transformation a été déclenchée par erreur, avec une seconde action symétrique qui retire la meta de modèle et le marqueur. Sans cette option de retour arrière, une erreur de clic obligerait à reconstruire la page manuellement.

- Vérifiez toujours `current_user_can( 'edit_page', $page_id )` avant d'exécuter une action groupée de ce type, jamais seulement une capacité générique.
- Utilisez systématiquement un nonce sur ce genre de lien d'action déclenché par une simple URL, pour éviter une exécution via un lien forgé.
- Gardez la liste des réglages appliqués visible quelque part (dans un journal ou une notice d'administration), pour que l'action reste traçable après coup.

> Sur les projets qui produisent des pages ponctuelles en série (salons, campagnes, offres limitées dans le temps), je recommande toujours de transformer une procédure documentée en action de code dès la deuxième ou troisième répétition : au-delà, l'erreur humaine finit par apparaître.

## Ce qu'il faut retenir

Regrouper plusieurs réglages manuels dispersés en une seule action accessible depuis la liste des pages transforme une checklist qu'on oublie régulièrement de suivre en un geste unique et fiable. Le coût de développement reste modeste face au temps gagné sur chaque nouvelle page de destination créée par la suite.
