A volte vi troverete in una situazione in cui vorrete creare un nuovo post o una pagina identica (o quasi identica) a un post o una pagina già esistente nel vostro sito.

Se il post o la pagina sono lunghi o includono molti media, la procedura di inserimento di tutto quel contenuto può essere molto laboriosa. Inoltre, se avete molti post che saranno molto simili tra loro, sarà abbastanza noioso dover digitare nuovamente tutto il testo manualmente o aggiungere tutti i file multimediali per creare nuovi post e nuove pagine.

Una soluzione potrebbe essere quella di aprire il post esistente (per comodità, qui useremo la parola “post” per fare riferimento a post e pagine) in una finestra o scheda del browser, quindi creare il vostro nuovo post in un’altra finestra e passare dalla prima alla seconda, copiando e incollando i vostri contenuti. Dopotutto, le versioni recenti (post-Gutenberg) di WordPress rendono questa operazione abbastanza semplice, ed avete anche a disposizione un’opzione “Copia tutto il contenuto”.

Ma se dovete farlo ancora e ancora, c’è il rischio di commettere errori. Che cosa succede se modificate accidentalmente il post originale, sovrascrivendo il contenuto che avete già pubblicato sul vostro sito? O se avete un gran numero di post da copiare e perdete traccia di quelli che avete già creato?

Tutto questo può crearvi un bel mal di testa.

Per fortuna c’è un modo più semplice. Sono disponibili, infatti, plugin gratuiti che vi permetteranno di duplicare i vostri post e le vostre pagine, in modo da poterli modificare e creare nuovi post quasi identici ai contenuti esistenti.

In questo post, vi mostreremo alcuni dei metodi che potete utilizzare per duplicare post e pagine di WordPress, e metteremo in evidenza alcuni dei migliori plugin per questo task.
Ma prima vi mostreremo come duplicare una pagina o un post in WordPress in modo semi-manuale, senza plugin. Questo significa copiare e incollare, ma WordPress lo rende estremamente semplice. Se avete solo un post da copiare, probabilmente questo metodo sarà più veloce dell’installazione di un plugin.

Come Duplicare una Pagina o un Post in WordPress, il metodo semi-manuale

Questo metodo può essere più veloce se avete solo un post da duplicare, in quanto vi fa risparmiare il tempo dell’installazione di un plugin. Se avete molti post da duplicare, vi consiglio vivamente di saltare questa sezione: troverete molto più rapido, ed anche più accurato, utilizzare un plugin.

Quindi, per quelli di voi che hanno solo bisogno di duplicare un post o una pagina, ecco come fare.

Iniziate aprendo il vostro post o la pagina esistente. Assicuratevi di non aver selezionato un singolo blocco facendo clic all’esterno di un blocco sul vostro post, oppure selezionando la scheda Documento nel riquadro di modifica a destra dello schermo. Se avete selezionato un blocco, WordPress copierà solo il contenuto di quel blocco e non l’intero documento.

Ora fate clic sui puntini di sospensione nella parte superiore destra della schermata di modifica (tre punti disposti uno sopra l’altro).

L'opzione Copia tutto il contenuto in WordPress
L’opzione Copia tutto il contenuto in WordPress

Apparirà un menu. Verso il fondo di questo menu, vedrete un’opzione Copia tutto il contenuto. Cliccateci sopra e riceverete un messaggio che vi informa che il vostro contenuto è stato copiato.

Ora create il vostro nuovo post. Assegnate un titolo al vostro post, quindi fate clic sul primo blocco vuoto creato per voi nella schermata di modifica. Utilizzate i tasti di scelta rapida per incollare sulla tastiera (Ctrl + V su PC, Cmd + V su Mac o clic destro e selezionate Incolla nel menu di scelta rapida visualizzato).

I contenuti del vostro post precedente ora appariranno nel vostro nuovo post. Magia! (OK, forse no.)

Ora potete modificare quel post e renderlo diverso dal post precedente. Questa è una cosa che consiglio vivamente di fare: non ha molto senso avere post che sono duplicati esatti l’uno dell’altro sul proprio sito. Non solo confonderà i visitatori, ma è anche male per la SEO.

E se volesste creare più duplicati del vostro post? Continuate a leggere…

Come Duplicare una Pagina o un Post in WordPress Utilizzando un Plugin

Il modo di gran lunga più rapido, semplice e affidabile per duplicare i post è utilizzare un plugin. Ciò vi farà risparmiare tempo, eviterà qualsiasi errore umano e vi consentirà di copiare qualsiasi tipo di post desideriate. In effetti, nella nostra esperienza, la duplicazione dei post è più frequente con i custom post type. È insolito avere due post del blog che sono quasi identici tra loro, ma è abbastanza comune per i prodotti di un negozio, ad esempio.

Ecco quindi alcuni plugin che semplificheranno la procedura di duplicazione dei post e le indicazioni su come utilizzarli.

WooCommerce

Vi starete chiedendo perché ho inserito WooCommerce in questo articolo, dato che è un plugin di ecommerce, non un plugin per la duplicazione dei post.

Ma vale la pena sapere che WooCommerce vi consente di duplicare i prodotti senza installare un plugin aggiuntivo. Quindi, prima di iniziare a cercare un plugin di duplicazione dei post e utilizzarlo per duplicare i vostri prodotti, utilizzate le funzionalità fornite insieme a WooCommerce.

Se andate alla schermata principale dei prodotti in WooCommerce e passate il mouse su qualsiasi prodotto, vedrete sotto quel post un link Duplica.

L'opzione di WooCommerce per la duplicazione dei prodotti
L’opzione di WooCommerce per la duplicazione dei prodotti

Basta fare clic su quel link Duplica e verrà creato un nuovo prodotto. Verrete indirizzati direttamente alla schermata di modifica del nuovo prodotto in modo da poter apportare modifiche e quindi pubblicarlo.

Vale la pena notare che lo slug del nuovo prodotto sarà lo slag del vecchio prodotto con il suffisso -copy, quindi anche se cambiate il titolo del nuovo prodotto, dovrete anche modificare lo slug.

Modificare un prodotto duplicato
Modificare un prodotto duplicato

Duplicate Post Plugin

Duplicate Post è il plugin più popolare per la duplicazione dei post, con oltre 3 milioni di download.

Una volta attivato, questo aggiunge un collegamento Clone a ciascun post presente nella schermata principale degli Articoli nel pannello di amministrazione di WordPress.

Il plugin Duplicate Posts
Il plugin Duplicate Posts

Fate clic sul link Clone sotto il post che volete duplicare e verrà creato per voi un nuovo post con lo stesso titolo e contenuto e nello stato di Bozza.

Potete quindi modificare quel nuovo post e assegnargli un nuovo titolo (è una cosa che consiglio vivamente: WordPress vi consente di duplicare i titoli ma non nel modo giusto per la user experience).

Aggiunge inoltre lo stesso link Clone alle pagine e ai tipi di post personalizzati (se li avete abilitati nelle impostazioni).

Duplicate Page

Il plugin Duplicate Page ha avuto oltre 900.000 download ed è un’alternativa al plugin Duplicate Post descritto sopra.

Dopo aver installato il plugin, andate alla schermata di amministrazione degli Articoli o delle Pagine, oppure alla schermata di amministrazione del vostro custom post type, e troverete un link Duplicate this sotto ogni post. Ecco il mio con un tipo di post personalizzato:

Il plugin Duplicate Pages
Il plugin Duplicate Pages

Fate clic sul link e otterrete un nuovo post (o pagina o articolo del vostro custom post type) con lo stesso contenuto e con il titolo del post originale, nello stato di Bozza. Dovrete modificarlo e modificarne lo slug prima di pubblicarlo.

Nota: se utilizzate WooCommerce, il collegamento Duplicate this di questo plugin non verrà visualizzato nella schermata dei Prodotti. WooCommerce lo sovrascrive con il proprio link Duplicate che ho descritto in precedenza.

Come Duplicare Post e Pagine in Blocco

I plugin che ho già menzionato vi permetteranno di duplicare i post uno alla volta. Ma cosa succede se dovete duplicare tutti i post del vostro sito o tutti i post di un custom post type? O forse tutti i post che avete pubblicato quest’anno?

Il plugin WP Bulk Post Duplicator vi consentirà di fare proprio questo. Invece di aggiungere un link per duplicare singoli post, vi dà una schermata di impostazioni che vi consente di duplicare i post in blocco in base ai criteri che impostate.

Nota: al momento in cui si scrive questo articolo, il plugin non risulta aggiornato da oltre due anni, pertanto è consigliabile installarlo su un sito di sviluppo e testarlo prima di utilizzarlo su un sito live. L’abbiamo utilizzato sul nostro sito di prova senza problemi.

Una volta che avete installato il plugin, andate su Impostazioni > WP Bulk Post Duplicator per visualizzare la schermata delle impostazioni del plugin.

Iniziate selezionando i tipi di post che desiderate duplicare e gli stati dei post. Quindi, se selezionate post e pubblicato, il plugin duplicherà tutti i vostri post pubblicati. Se invece selezionate post e bozze, duplicherà solo tutte le bozze.

Impostazioni duplicazione di gruppo - post type e status
Impostazioni duplicazione di gruppo – post type e status

Scorrete verso il basso e selezionate l’anno dei post che volete duplicare (questo è facoltativo). Potete anche specificare lo stato dei nuovi post creati. Se qui non selezionate nulla, verrà impostato di default su Bozza.

Impostazioni duplicazione di gruppo - anno e stato di pubblicazione
Impostazioni duplicazione di gruppo – anno e stato di pubblicazione

Fate clic sul pulsante Duplica e il plugin duplicherà i vostri post. Qui potete vedere tutte le mie pagine duplicate, con 12 pagine pubblicate esistenti e 12 nuove bozze. Devo quindi esaminare tutte le pagine e modificarle prima di pubblicarle. Ciò richiederà ovviamente del tempo, ma è stato tutto reso più veloce dalla duplicazione in blocco.

Scriviamo il Nostro Plugin di Duplicazione dei Post

Cosa succede se non si desidera utilizzare un plugin di terze parti per duplicare i post e si preferisce creare il proprio plugin?

Nessun problema. Segui questi passaggi per creare il vostro plugin per la duplicazione dei post.

1. Installazione del plugin

Iniziate installando il plugin. Aggiungete un nuovo file alla cartella wp-content/plugins e aggiungete questo testo commentato (potete modificare il vostro codice inserendo il vostro nome autore):

<?php
/*
Plugin Name: Kinsta Duplicate posts and pages
Plugin URI: https://kinsta.com
Description: Plugin to accompany kinsta posst on duplicating posts in WordPress. Allows for duplication of posts and pages.
Version: 1.0
Author: Rachel McCollin
Author URI: https://rachelmccollin.com
TextDomain: kinsta
License: GPLv2
*/

2. Creazione della Funzione

Ora aggiungete la funzione per duplicare i post e agganciatela ad una azione. Questo action hook non esiste ancora: non vi preoccupate, lo creeremo tra poco.

function kinsta_duplicate_post(){
}
add_action( 'admin_action_kinsta_duplicate_post', 'kinsta_duplicate_post' );

Ora creiamo l’azione che verrà come parte di una funzione per aggiungere il link di duplicazione alle schermate dei post e delle pagine.

function kinsta_duplicate_post_link( $actions, $post ) {
 if ( current_user_can( 'edit_posts') ) {
  $actions['duplicate'] = 'Duplicate';
 }
 return $actions;
}
add_filter( 'post_row_actions', 'kinsta_duplicate_post_link', 10, 2 );
add_filter( 'page_row_actions', 'kinsta_duplicate_post_link', 10, 2);

Questo codice aggiungerà il collegamento per la duplicazione, ma in realtà non duplicherà ancora nulla.

3. Aggiungere la Funzionalità di Duplicazione

Aggiungiamo il codice per la duplicazione. Tutto il resto del codice viene inserito nella funzione vuota kinsta_duplicate_post().

Innanzitutto, controlliamo che sia stato selezionato un post valido e verifichiamo un nonce, per sicurezza:

global $wpdb;

// Die if post not selected
if (! ( isset( $_GET['post']) || isset( $_POST['post'])  || ( isset($_REQUEST['action']) && 'kinsta_duplicate_post' == $_REQUEST['action'] ) ) ) {
 wp_die( __( 'Please select a post to duplicate.', 'kinsta' ) );
}

// Verify nonce
if ( ! isset( $_GET['duplicate_nonce'] ) || ! wp_verify_nonce( $_GET['duplicate_nonce'], basename( __FILE__ ) ) ) {
 return;
}

Ora dobbiamo recuperare l’ID del post da duplicare, insieme ai suoi dati:

// Get id of post to be duplicated and data from it
$post_id = ( isset( $_GET['post']) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) );
$post = get_post( $post_id );

Possiamo utilizzarlo per definire un array di argomenti e inserire un nuovo post nel database, utilizzando wp_insert_post(). Ma prima aggiungete un’istruzione condizionale per verificare che il post non sia nullo:

if ( isset( $post ) && $post != null ) {

}

Aggiungete questo all’interno dell’istruzione condizionale:

// args for new post
$args = array(
 'comment_status' => $post->comment_status,
 'ping_status'    => $post->ping_status,
 'post_author'    => $post->post_author,
 'post_content'   => $post->post_content,
 'post_excerpt'   => $post->post_excerpt,
 'post_name'      => $post->post_name,
 '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 new post
$new_post_id = wp_insert_post( $args );

Ora recupereremo le tassonomie del vecchio post e le aggiungeremo a quello nuovo:

// add taxonomy terms to the new post

// identify taxonomies that apply to the post type
$taxonomies = get_object_taxonomies( $post->post_type );

// add the taxonomy terms to the new post
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 );
}

E poi aggiungeremo eventuali metadati aggiuntivi del post, grazie ad una query SQL:

// use SQL queries to duplicate postmeta
$post_metas = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id");
if ( count( $post_metas )!=0 ) {
 
$sql_query = "INSERT INTO $wpdb->postmeta ( post_id, meta_key, meta_value ) ";
 
foreach ( $post_metas as $post_meta ) {
  $meta_key = $post_metas->meta_key;
  if( $meta_key == '_wp_old_slug' ) continue;
  $meta_value = addslashes( $post_metas->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 );

}

Infine, controlliamo di che tipo di post è il post e reindirizziamo alla schermata giusta.

// redirect to admin screen depending on post type
$posttype = get_post_type( $post_id );
wp_redirect( admin_url( 'edit.php?post_type=' . $posttype ) );

Ora, al di fuori delle parentesi graffe per il controllo if ( isset( $post ) && $post != null ), aggiungiamo un messaggio di errore:

else {
 // display an error message if the post id of the post to be duplicated can't be found
 wp_die( __( 'Post cannot be found. Please select a post to duplicate.', 'kinsta' ) );
}

E questo è tutto!

Il Plugin Completo

Ecco il codice completo del plugin:

<?php

/* Plugin Name: Kinsta Duplicate posts and pages

Plugin URI: https://kinsta.com
Description: Plugin to accompany kinsta posst on duplicating posts in WordPress. Allows for duplication of posts and pages. Version: 1.0 Author: Rachel McCollin
Author URI: https://rachelmccollin.com
TextDomain: kinsta
License: GPLv2
*/

/********************************************************************
kinsta_duplicate_post() - duplicates the selected post
*********************************************************************/

function kinsta_duplicate_post(){

global $wpdb;

// Die if post not selected
if (! ( isset( $_GET['post']) || isset( $_POST['post'])  || ( isset($_REQUEST['action']) && 'kinsta_duplicate_post' == $_REQUEST['action'] ) ) ) {

wp_die( __( 'Please select a post to duplicate.', 'kinsta' ) );
}

// Verify nonce
if ( ! isset( $_GET['duplicate_nonce'] ) || ! wp_verify_nonce( $_GET['duplicate_nonce'], basename( __FILE__ ) ) ) {
return;
}

// Get id of post to be duplicated and data from it
$post_id = ( isset( $_GET['post']) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) );
$post = get_post( $post_id );

// duplicate the post
if ( isset( $post ) && $post != null ) {

// args for new post
$args = array(
'comment_status' => $post->comment_status,
'ping_status'    => $post->ping_status,
'post_author'    => $post->post_author,
'post_content'   => $post->post_content,
'post_excerpt'   => $post->post_excerpt,
'post_name'      => $post->post_name,
'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 new post
$new_post_id = wp_insert_post( $args );

// add taxonomy terms to the new post

// identify taxonomies that apply to the post type
$taxonomies = get_object_taxonomies( $post->post_type );

// add the taxonomy terms to the new post
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 );

}

// use SQL queries to duplicate postmeta
$post_metas = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id");

if ( count( $post_metas )!=0 ) {
 
 $sql_query = "INSERT INTO $wpdb->postmeta ( post_id, meta_key, meta_value ) ";

 foreach ( $post_metas as $post_meta ) {

  $meta_key = $post_metas->meta_key;
  if( $meta_key == '_wp_old_slug' ) continue;
  $meta_value = addslashes( $post_metas->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 );

 }

 // redirect to admin screen depending on post type
 $posttype = get_post_type( $post_id );
 wp_redirect( admin_url( 'edit.php?post_type=' . $posttype ) );

 } else {

  // display an error message if the post id of the post to be duplicated can't be found
  wp_die( __( 'Post cannot be found. Please select a post to duplicate.', 'kinsta' ) );
 }

}
add_action( 'admin_action_kinsta_duplicate_post', 'kinsta_duplicate_post' );

// Add the duplicate link to action list for post_row_actions
function kinsta_duplicate_post_link( $actions, $post ) {

 if ( current_user_can( 'edit_posts') ) {
  $actions['duplicate'] = 'Duplicate';
 }

 return $actions;

}
add_filter( 'post_row_actions', 'kinsta_duplicate_post_link', 10, 2 );
add_filter( 'page_row_actions', 'kinsta_duplicate_post_link', 10, 2);

Potete trovare il plugin completo anche su github.

Congratulazioni! Ora avete il vostro plugin per duplicare post e pagine nel vostro sito WordPress.

Credit: questo codice è stato in parte scritto facendo riferimento ad un post del blog di Hostinger.

Riepilogo

L’utilizzo di un plugin per duplicare post e pagine può essere un metodo più rapido rispetto alla duplicazione manuale e può rimuovere il rischio di errori durante la copia del contenuto.

Se avete solo un post da copiare, potreste trovare più veloce utilizzare la funzione “Copia tutto il contenuto” incorporata in WordPress, ma per più di un post, è meglio utilizzare un plugin. Se utilizzate uno dei plugin sopra elencati, oppure se scrivete il vostro codice, sarete in grado di duplicare tutti i post, le pagine o i tipi di post personalizzati tutte le volte che volete.

Se lo fate in questo modo, risparmierete tempo e (cosa ancora più importante) eliminerete il rischio di modificare accidentalmente il vostro post originale, quando invece avreste dovuto modificare il post duplicato.