Vingt-trois variantes de diamètre, chacune avec sa propre résistance à la traction, son poids et sa référence fournisseur : recréer une fiche produit quasiment identique à une autre, pour un fabricant qui décline le même article en dizaines de références techniques, devient vite un exercice de recopiage fastidieux et source d’erreurs de saisie.
La fonction de duplication native de l’administration WordPress se limite à copier le contenu principal de l’article, sans toucher aux champs personnalisés complexes. Pour un catalogue B2B où chaque fiche embarque plusieurs groupes de champs répétables, cette limite rend l’outil quasiment inutile tel quel.
Ce que la duplication native ne copie pas
Un clic sur « Dupliquer » via une extension classique recrée bien le titre, le contenu et parfois les taxonomies, mais les groupes répétables ACF, eux, restent souvent vides ou mal copiés, car leur structure en tableau sérialisé demande un traitement spécifique lors de l’enregistrement du nouvel article.
Construire un raccourci de duplication complet

La fonction get_fields() d’ACF renvoie l’ensemble des champs personnalisés d’un article sous forme de tableau, groupes répétables compris. Il suffit ensuite de les réappliquer un par un sur le nouvel article créé, avec update_field().
function dupliquer_fiche_produit( $post_id ) {
$original = get_post( $post_id );
$nouveau_id = wp_insert_post( array(
'post_type' => $original->post_type,
'post_title' => $original->post_title . ' (copie)',
'post_status' => 'draft',
'post_author' => get_current_user_id(),
) );
$champs = get_fields( $post_id );
if ( is_array( $champs ) ) {
foreach ( $champs as $cle => $valeur ) {
update_field( $cle, $valeur, $nouveau_id );
}
}
$termes = wp_get_object_terms( $post_id, 'famille_produit', array( 'fields' => 'ids' ) );
wp_set_object_terms( $nouveau_id, $termes, 'famille_produit' );
return $nouveau_id;
}
Comme get_fields() renvoie déjà les groupes répétables sous forme de tableaux imbriqués, update_field() les réenregistre correctement sans étape supplémentaire, y compris pour des sous-champs de type liste déroulante ou champ relationnel.
Ajouter le raccourci dans la liste des produits
Un lien direct dans la liste d’administration des produits, à côté de « Modifier » et « Corbeille », évite à l’utilisateur de passer par un écran intermédiaire pour dupliquer une fiche.
add_filter( 'post_row_actions', function( $actions, $post ) {
if ( $post->post_type !== 'produit_industriel' ) {
return $actions;
}
$url = wp_nonce_url(
admin_url( 'admin-post.php?action=dupliquer_produit&post;=' . $post->ID ),
'dupliquer_produit_' . $post->ID
);
$actions['dupliquer'] = '<a href="' . esc_url( $url ) . '">Dupliquer</a>';
return $actions;
}, 10, 2 );
Ce qu’il faut réinitialiser après duplication
- La référence interne unique, qui ne peut pas être identique à l’original
- Le statut de publication, remis systématiquement en brouillon
- Les éventuelles dates de validité technique propres à la variante d’origine
Oublier de vider la référence interne est l’erreur la plus fréquente : deux fiches partageant la même référence sèment la confusion dans les recherches internes et les exports vers les commerciaux.
Le cas des champs relationnels
Un champ relationnel vers des documents techniques ou des fiches de sécurité pointe, après duplication, vers les mêmes documents que l’original. C’est généralement le comportement souhaité tant que la variante partage la même documentation, mais il faut le vérifier au cas par cas selon le type de champ concerné.
Une duplication qui ne reproduit pas fidèlement chaque champ répétable coûte plus de temps à corriger qu’une saisie manuelle complète : mieux vaut tester le raccourci sur une fiche complexe avant de le déployer.
En résumé
S’appuyer sur get_fields() et update_field() permet de construire une duplication fidèle, y compris pour des groupes répétables complexes, sans dépendre d’une extension générique mal adaptée au catalogue technique. L’import en masse depuis un ERP reste un chantier distinct, avec ses propres contraintes de mapping de données.