Duplicare una pagina, un articolo o un prodotto in WordPress è un’operazione che può farti risparmiare molto tempo, soprattutto quando devi creare contenuti simili tra loro o riutilizzare layout già collaudati. In questa guida completa vedremo tutti i metodi disponibili per clonare i tuoi contenuti WordPress, dai più semplici ai più avanzati.
Perché duplicare pagine e post su WordPress?
Duplicare un contenuto può essere utile in varie situazione. Mi viene in mente una pagina con un layout giù creato a cui dobbiamo modificare solo il contenuto (in tutto o in parte), oppure duplicare un prodotto, dove abbiamo dei dati cominuni e quindi è comodo poterlo duplicare per poi aggiustare solo alcuni dati, invece di scrivere tutto da capo.
In sostanza duplicare ci permette di risparmiare molto tempo nelle fasi ripetitive.
I metodi per duplicare un post, una pagina o un prodotto
Esistono diversi metodi per duplicare un contenuto, dai più semplici e “nativi” a quelli più completi. Usare metodi diversi può cambiare anche il “cosa” viene duplicato. Ad esempio copiare e incollare il contenuto da una articolo con un semplice copia e incolla non richiede plugin aggiuntivi, ma la copia può essere limitata vista che alcuni elementi, come la categoria o il titolo, non vengono copiati.
Questo non significa che sia un medoto da scartare a priori, anzi. Se hai solo un contenuto da duplicare, è il metodo più facile e veloce. Ma vediamo quali sono i metodi disponibili e che io preferisco per la duplicazione.
Duplicazione manuale con Gutenberg
Chi usa WordPress molto probabilmene conoscerà anche Gutemberg, l’editor a blocchi integrato in WordPress. Se è vero che Gutemberg è un po’ ostico per la creazione di pagine classiche (a meno di non usare HTML e CSS), è lo strumento perfetto per scrivere articoli di blog. Una pagina bianca in cui possiamo concentrarci esclusivamente sul testo.
Duplicare un contenuto con Gutemberg è molto semplice. Basta un copia e incolla.
Entri in un articolo, clicchi sui tre puntini in alto a destra, clicchi su “copia tutti i blocchi” e poi ti basta creare un nuovo articolo e incollare il contenuto.
Questo è un metodo molto spartano, quasi banale, che probabilmente non è adatto a tutti. Ma se il tuo sito è costruito interamente con Guternberg è un’ottima soluzione se devi copiare alcune pagine o articoli e non vuoi perdere tempo ad installare altri plugin.
Questo metodo ha però delle limitazioni: per prima cosa, se hai costruito il tuo sito con un page builder, non funzionerà sulle pagine, ma solo sugli articoli. Anche se hai costruito un tema custom ma senza integrarlo con Gutenber questo metodo non funzionerà, visto che le tue pagine su Gutenberg saranno bianche.
Inoltre verrà copiato solo il contenuto, quindi campi personalizzati, categorie o immagini in evidenza non saranno copiate.
Ricapitolando: se devi duplicare un o due articoli il metodo manuale può fare al caso tuo. Se le cose da duplicare diventano di più, meglio schippare direttamente ad altri metodi.
Duplicare un contenuto con un plugin
Ah, i plugin! Gioie e dolori dello sviluppo in WordPress! Se usati accuratamente possono dare un boost alla creazione di un sito, quindi vogliamo farci mancare un plugin per le duplicazioni?
Quello che fanno a livello di interfaccia, con più o meno funzioni, è aggiungere il tasto “duplica” tra i tasti funzione degli articoli o della pagine (per intenderci dove trovi anche “modifica” o “modifica rapida”). Basta un clic e il contenuto è copiato.
Di plugin per duplicare ce ne sono tanti, e fanno la cosa principale per cui sono stati creati in maniera ottimale, quindi mi sbilancio nel dirvi che sceglierne uno piuttosto che un altro è pressochè indifferente, se non per funzioni specifiche.
Io uso un plugin qualdo sviluppo un sito, e visto che ti starai aspettando un indicazioni chiara, ti dico quache uso io e ti do qualche alternativa.
- Duplicate page: è il plugin che uso in fase di sviluppo, è estremamente semplice e questo è sua il suo vantaggio che il suo svantaggio. Fa una cola cosa, cioè pubblicare pagine e articoli, e la fa bene. Non ci sono particolari impostazioni rispetto a come è stato impostato dallo sviluppatore si può scegliere poco nulla. Sinceramente non ho mai avuto la necessità di avere altro. Non mi interessa scegliere di non duplicare l’autore o altre cose. Inoltre, se una volta finito il sito non mi serve più (il più delle volte è così), lo disinstallo.

- Yoast Duplicate Post (ex Duplicate Post): un’altro colosso con oltre 4 milioni di installazioni attive e che porta il nome di uno dei più famosi plugin SEO (SEO Yoast), funziona perfettamente e ha una serie di impostazioni che ad esempio mancano su Duplicate Post. Ad esempio è possibile scegliere gli elementi da copiare oppure abilitare il permesso di copiare solo a determinati utenti. Se quest’ultima feature può essere utili in siti in cui collaborato più persone, le altre le trovo poco utili per me. Quindi è un ottimo plugin, ma come sempre dipende dall’uso che ne dovete fare.

Duplicare i prodotti di WooCommerce
Se quello che sta cercando è uno strumento per duplicare un prodotto di WooCommerce, bè, non ne hai bisogno. WooCommerce infatti ha un suo duplicatore integrato, e lo si nota dalla scritta “Duplica” presente sotto il prodotto.
Anche in questo caso lo strumento è molto semplice e non permette di fare particolari modifiche. Come prima, dipende dall’uso che ne devi fare. Io non ho mai trovato utilità nell’avere delle implementazioni specifiche, ma comprendo che a qualcuno potrebbe interessare. Ecco, in questo caso Yoast Duplicate Post permette di gestire alcuni degli elementi duplicati.
Duplicazione via codice (per sviluppatori)
Se hai delle esigenze molto specifiche e vuoi crearti qualcosa da solo, è possibile anche creare un “duplicatore” via codice. I vantaggi di questa soluzione è principalmente l’estrema flessibilità della soluzione, che ti permette di sviluppare una soluzione custom con funzioni che negli altri plugin non sono presenti.
Il difetto è che devi essere uno sviluppatore e conoscere PHP, il motore alla base di WordPress.
Personalmente non ho mai sviluppato un plugin di questo tipo (anche se prima o poi mi piacerebbe cimentarmi) quindi ho deciso di metterti a disposizione una soluzione open source sviluppata dal team si SupportHost. La trovi su GitHub.
Ora, anche se è pubblicato su GitHub, non è stata specificata una licenza. Quindi, se sei un dev e vuoi partire da qua per sviluppare qualcosa di tuo (magari un giorno anche da vendere) meglio contattare SupportHost.
Se invece vuoi semplicemente usarlo suo tuo sito, implementarlo è estremamente facile.
Aggiungere la funzione con WP Code
WP Code è un plugin che permette di inserire codice di tutti i tipi nel tuo sito WordPress. Dal codice di “riconoscimento” di Google Search Console a snippet in PHP. Lo puoi installare cercandolo dalla sezione plugin di WordPress e, dopo aver aggiunto un nuovo sbippet PHP, puoi copiare e incollare il codice qua sotto. Il codice è stato creato e condiviso su GitHub dal team di SupportHost, quindi puoi copiarlo direttamente da qua oppure andare nella pagina dedicata della repository.
<?php
/*
* Function for post duplication. Dups appear as drafts. User is redirected to the edit screen
*/
function rd_duplicate_post_as_draft(){
global $wpdb;
if (! ( isset( $_GET['post']) || isset( $_POST['post']) || ( isset($_REQUEST['action']) && 'rd_duplicate_post_as_draft' == $_REQUEST['action'] ) ) ) {
wp_die('No post to duplicate has been supplied!');
}
/*
* Nonce verification
*/
if ( !isset( $_GET['duplicate_nonce'] ) || !wp_verify_nonce( $_GET['duplicate_nonce'], basename( __FILE__ ) ) )
return;
/*
* get the original post id
*/
$post_id = (isset($_GET['post']) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) );
/*
* and all the original post data then
*/
$post = get_post( $post_id );
/*
* if you don't want current user to be the new post author,
* then change next couple of lines to this: $new_post_author = $post->post_author;
*/
$current_user = wp_get_current_user();
$new_post_author = $current_user->ID;
/*
* if post data exists, create the post duplicate
*/
if (isset( $post ) && $post != null) {
/*
* new post data array
*/
$args = array(
'comment_status' => $post->comment_status,
'ping_status' => $post->ping_status,
'post_author' => $new_post_author,
'post_content' => $post->post_content,
'post_excerpt' => $post->post_excerpt,
'post_name' => $post->post_name.'-new',
'post_parent' => $post->post_parent,
'post_password' => $post->post_password,
'post_status' => 'draft',
'post_title' => $post->post_title,
'post_type' => $post->post_type,
'to_ping' => $post->to_ping,
'menu_order' => $post->menu_order
);
/*
* insert the post by wp_insert_post() function
*/
$new_post_id = wp_insert_post( $args );
/*
* get all current post terms ad set them to the new post draft
*/
$taxonomies = get_object_taxonomies($post->post_type); // returns array of taxonomy names for post type, ex array("category", "post_tag");
foreach ($taxonomies as $taxonomy) {
$post_terms = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'slugs'));
wp_set_object_terms($new_post_id, $post_terms, $taxonomy, false);
}
/*
* duplicate all post meta just in two SQL queries
*/
$post_meta_infos = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id");
if (count($post_meta_infos)!=0) {
$sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) ";
foreach ($post_meta_infos as $meta_info) {
$meta_key = $meta_info->meta_key;
if( $meta_key == '_wp_old_slug' ) continue;
$meta_value = addslashes($meta_info->meta_value);
$sql_query_sel[]= "SELECT $new_post_id, '$meta_key', '$meta_value'";
}
$sql_query.= implode(" UNION ALL ", $sql_query_sel);
$wpdb->query($sql_query);
}
/*
* finally, redirect to the edit post screen for the new draft
*/
wp_redirect( admin_url( 'post.php?action=edit&post=' . $new_post_id ) );
exit;
} else {
wp_die('Post creation failed, could not find original post: ' . $post_id);
}
}
add_action( 'admin_action_rd_duplicate_post_as_draft', 'rd_duplicate_post_as_draft' );
/*
* Add the duplicate link to action list for post_row_actions
*/
function rd_duplicate_post_link( $actions, $post ) {
if (current_user_can('edit_posts')) {
$actions['duplicate'] = '<a href="' . wp_nonce_url('admin.php?action=rd_duplicate_post_as_draft&post=' . $post->ID, basename(__FILE__), 'duplicate_nonce' ) . '" title="Duplicate this item" rel="permalink">Duplicate</a>';
}
return $actions;
}
add_filter( 'post_row_actions', 'rd_duplicate_post_link', 10, 2 );
add_filter('page_row_actions', 'rd_duplicate_post_link', 10, 2);Considerazioni SEO sulla duplicazione
Duplicare una pagina è molto utile in fase di sviluppo. Pensa al caso in cui si devono creare 3 pagine con un determinato layout identico tra loro, ma con contenuti diversi. Invece di costrurlo da zero, duplico la pagina e ne modifico il contenuto.
Soprattutto per chi è agli inizi o a chi non mastica di SEO, potrebbe venire la tentazione di creare creare tante pagine uguali modificando solo il titolo oppure piccole parti. Ecco, pagine quasi identihce non vengono viste di buon occhio da Google che le considera come pagine duplicate. Questo può creare un po’ di problemi lato SEO.
Se è vero che esistono dei modi per “risolvere” il problema, la questione non è così semplice da poter essere trattata in un breve trafiletto. In generale la besta practice è di non pubblicare pagine con gli stessi contenuti o quasi e di usare la duplicazione come aiuto per velocizzare il lavoro il lavoro di creazione.
Conclusioni
Duplicare pagine, post e prodotti in WordPress è un’operazione semplice che può farti risparmiare molto tempo. Il metodo manuale con “Copia tutti i blocchi” è perfetto per operazioni occasionali, mentre i plugin come Yoast Duplicate Post offrono funzionalità avanzate per chi deve duplicare contenuti frequentemente.
Ricorda sempre di modificare i contenuti duplicati prima di pubblicarli per evitare problemi SEO e confusione per i tuoi visitatori.
Per chi preferisce un controllo totale, le soluzioni via codice offre la massima flessibilità.
