Un article ou une page, c’est trois choses : une ligne de la table wp_posts (titre, contenu, extrait, slug, page parente, statut), des métadonnées (image mise en avant, modèle, champs personnalisés, réglages SEO) et des termes (catégories, étiquettes). Les outils natifs de WordPress n’en copient qu’une partie : le contenu. Le fonctionnement natif a été relu dans les sources de WordPress 7.1 et de son éditeur. Les commandes WP-CLI ci-dessous ont été exécutées sur une installation isolée de WordPress 7.1.4.

La réponse courte

Pour reprendre la mise en page : menu Options de l’éditeur, « Copier tous les blocs », puis coller dans un nouvel article. Pour une copie plus large en brouillon : une extension adaptée, ou wp post create --from-post avec --post_status=draft. Dans tous les cas, la copie reste un brouillon tant qu’elle n’a pas été relue.

Ce que WordPress fait sans extension

« Copier tous les blocs »

Dans l’éditeur de blocs, le menu Options (les trois points en haut à droite) contient, sous « Outils », l’entrée « Copier tous les blocs ». Le composant CopyContentMenuItem (packages/editor/src/components/more-menu/copy-content-menu-item.js) place dans le presse-papiers le résultat de getEditedPostContent() : le contenu de la publication, avec ses commentaires de blocs, tel qu’il serait enregistré. L’éditeur confirme par « Tout le contenu a été copié. »

Collé dans un nouvel article, ce texte redevient des blocs : le gestionnaire de collage (pasteHandler(), packages/blocks/src/api/raw-handling/paste-handler.ts) repère la chaîne <!-- wp: et analyse le contenu comme des blocs au lieu de le traiter comme du HTML quelconque. Les réglages de chaque bloc suivent donc. Le titre, lui, ne fait pas partie du contenu : il ne suit pas.

Pas d’action « Dupliquer » pour les articles et les pages

L’éditeur connaît pourtant une action de duplication. Mais dans packages/editor/src/dataviews/store/private-actions.ts, un test sur IS_GUTENBERG_PLUGIN la retire aux articles et aux pages hors de l’extension Gutenberg. Dans cette version de WordPress seul, cette action n’est donc pas proposée pour un article ni une page. Avec l’extension Gutenberg active, l’action propose un brouillon intitulé « … (copie) ».

Les compositions, synchronisées ou non

Le menu d’options d’un bloc (ou d’une sélection de blocs) propose « Créer une composition ». La fenêtre affiche un interrupteur « Synchronisée », avec l’aide « Synchronisez cette composition sur plusieurs emplacements. » Le choix est enregistré dans la métadonnée wp_pattern_sync_status du type de contenu wp_block, ajoutée dans WordPress 6.3.

  • Non synchronisée : à chaque insertion, les blocs sont recopiés. Chaque copie vit sa vie. C’est l’outil pour une mise en page type que l’on réutilise.
  • Synchronisée : la page ne contient qu’une référence, un bloc core/block avec un attribut ref. Modifier la composition la modifie partout. C’est l’outil pour un encart identique sur plusieurs pages, pas pour dupliquer une page.

L’entrée « Détacher » du bloc transforme une composition synchronisée en blocs ordinaires, indépendants de l’original.

Ce que la copie des blocs laisse derrière

ÉlémentOù WordPress le rangeSuit « Copier tous les blocs » ?
Contenupost_contentOui
Titre, extraitpost_title, post_excerptNon
Image mise en avantmétadonnée _thumbnail_id, lue par get_post_thumbnail_id()Non
Catégories, étiquettestaxonomiesNon
Modèle de pagemétadonnée _wp_page_template, lue par get_page_template_slug()Non
Page parentepost_parentNon
Champs personnalisés, réglages SEOmétadonnées, ajoutées par le thème ou les extensionsNon

Les images du contenu ne sont pas dupliquées non plus : les blocs pointent vers les mêmes fichiers de la médiathèque. Et un constructeur de pages qui garde sa mise en page ailleurs que dans le contenu n’a rien à offrir à ce menu, qui n’existe d’ailleurs que dans l’éditeur de blocs.

Les pièges de la copie

Le slug change à la publication

wp_insert_post() (wp-includes/post.php) laisse un brouillon sans slug, ou avec le même slug qu’une autre publication : wp_unique_post_slug() rend le slug tel quel pour les statuts draft, pending et auto-draft. Le contrôle d’unicité intervient en quittant ces statuts, notamment à la publication ou à la planification. Si le slug est pris, la fonction ajoute -2, puis -3, et ainsi de suite. Pour une page, le contrôle se fait parmi les pages du même parent.

Une copie créée avec un nouvel identifiant ne remplace pas l’original. Elle obtient sa propre adresse, en -2 ou dérivée de son titre, et l’original reste en ligne à la sienne.

Le brouillon publié par erreur

Dans le fonctionnement natif, un brouillon n’est pas public. Un compte autorisé peut le relire dans l’éditeur ou avec son lien d’aperçu. Le plan de site natif (WP_Sitemaps_Posts) ne liste que le statut publish.

Une fois publiée, en revanche, la copie est une seconde page au même contenu, sur une autre adresse, que les moteurs peuvent explorer et indexer. Avant de cliquer sur « Publier », vérifiez le titre, le slug et l’onglet ouvert : sur deux écrans presque identiques, on confond vite l’original et la copie.

La composition synchronisée embarquée

Une page qui contient une composition synchronisée la transmet à sa copie sous forme de référence. Modifier ce bloc dans la copie modifie l’original, et toutes les autres pages qui l’utilisent. Détachez-la d’abord si la copie doit diverger.

Copier avec WP-CLI en imposant le statut brouillon

wp post create (paquet wp-cli/entity-command, Post_Command::create()) accepte --from-post=<post_id>. Le code récupère toutes les colonnes de la publication source, n’en retire que l’identifiant, les dates et le guid, puis ajoute ses métadonnées, ses catégories et ses étiquettes. Le statut et l’auteur sont donc ceux de l’original : copier un article publié crée un article publié.

wp post get 123 --fields=ID,post_title,post_status,post_name
wp post create --from-post=123 --post_status=draft --post_title='Copie de travail' --porcelain
wp post meta list 456

Les options passées sur la ligne de commande l’emportent sur celles de la source : --post_status=draft suffit à garder la copie hors ligne. --porcelain n’affiche que le nouvel identifiant, à reporter dans la troisième commande. Faites d’abord l’essai sur une copie de test du site et vérifiez les données reprises avant de publier. Une métadonnée à plusieurs valeurs n’en garde qu’une, la dernière. Les taxonomies autres que catégories et étiquettes ne suivent pas. Les clés de métadonnées internes suivent aussi, comme _edit_lock.

Les extensions

Yoast Duplicate Post est l’extension établie : plus de trois millions d’installations actives selon sa fiche officielle consultée le 6 novembre 2026. Elle y annonce le clonage de publications de tout type ou leur copie en nouveaux brouillons : un lien sous le titre dans la liste des articles ou des pages, une action groupée, un lien depuis l’écran d’édition et depuis la barre d’administration. Ses réglages permettent de limiter son usage à certains rôles ou types de contenu.

Mes Brouillons, notre extension, fait une seule chose : copier un article ou une page natifs en nouveau brouillon, au nom de l’utilisateur qui la lance, après avoir vérifié ses droits de modification sur l’original et de création. Elle reprend le titre, le contenu, l’extrait, les catégories et les étiquettes, et réutilise l’image mise en avant si elle est valide. Elle ne copie ni les contenus privés ou protégés par mot de passe, ni les mises en page Elementor ou WPBakery, ni les champs personnalisés, les réglages SEO, le modèle ou la page parente. Elle ne publie rien. Les brouillons créés restent en place si vous la désinstallez.

Quand une copie en brouillon suffit

Le plus souvent. Une copie en brouillon répond à trois besoins : retravailler une page en ligne sans que les visiteurs voient le chantier, partir d’une page existante pour en créer une voisine, essayer une autre mise en page dans un brouillon séparé.

Pour le premier cas, ne publiez pas la copie à la place de l’original : elle aurait une autre adresse. Une fois le brouillon prêt, utilisez « Copier tous les blocs » dans la copie, ouvrez l’original, passez en « Éditeur de code », remplacez le contenu et enregistrez. L’adresse, les liens entrants et l’historique des révisions de l’original sont conservés. Reportez à la main ce qui n’est pas du contenu, puis mettez le brouillon à la corbeille.

Il ne suffit pas quand la page tient surtout à ses métadonnées : boutique, champs personnalisés structurants, constructeur de pages. Là, il faut un outil qui sait copier ces données, et vérifier ce qu’il a réellement copié avant toute publication.

Sources vérifiées