Come duplicare un articolo WordPress con WPCode

Se pubblichi spesso articoli con una struttura simile, ricreare ogni volta tutto da zero può essere scomodo.

Con questo semplice snippet per WPCode puoi aggiungere il comando Duplica direttamente nella lista degli articoli WordPress.

Con un clic viene creata una nuova bozza che mantiene:

  • titolo
  • contenuto
  • immagine in evidenza
  • categorie
  • tag
  • estratto
  • campi personalizzati

L’articolo originale non viene modificato e la nuova copia non viene pubblicata automaticamente.

Come installarlo

Vai in WordPress → WPCode → Add Snippet → Add Your Custom Code.

Interfaccia di WPCode con il pulsante blu Aggiungi uno snippet personalizzato per duplicare articolo WordPress con WPCode

Seleziona PHP Snippet, incolla il codice riportato qui sotto, imposta l’esecuzione nell’area amministrativa e attiva lo snippet.

Interfaccia di WPCode con l'opzione Snippet PHP evidenziata in blu per duplicare articolo WordPress con WPCode

mpostazione consigliata in WPCode

Quando crei lo snippet in WPCode, impostalo per essere eseguito solo nell’area amministrativa di WordPress. In questo modo il codice viene caricato esclusivamente nella dashboard e nella lista degli articoli, senza aggiungere funzioni o codice inutile alle pagine visibili ai visitatori del sito.

Impostazioni di WPCode per duplicare articolo WordPress con selezione dell'esecuzione solo per gli amministratori

Come utilizzarlo

Apri Articoli → Tutti gli articoli.

Passando con il mouse sopra un articolo comparirà il nuovo comando Duplica.

Schermata WordPress di BACKdigit: elenco articoli con titolo blu, menu laterale scuro e sotto ciascun titolo il link Duplica

Facendo clic, WordPress creerà una nuova bozza e aprirà direttamente l’editor del nuovo articolo.

Puoi quindi modificare titolo e contenuto e pubblicarlo normalmente.

Funziona anche con i plugin SEO

Lo snippet non sostituisce Yoast SEO, All in One SEO, Rank Math o altri plugin SEO.

I dati SEO non vengono modificati direttamente dallo snippet. La copia viene creata come nuova bozza, lasciando al plugin SEO installato sul sito la gestione dei relativi metadati.

Attenzione

Prima di utilizzare lo snippet su un sito importante è consigliabile effettuare un backup. Lo snippet crea copie degli articoli, ma non elimina né modifica l’articolo originale.

Snippet pronto per WPCode

Nel campo PHP Snippet di WPCode copia tutto il contenuto del box:

<?php
/**
 * BACKdigit - Duplica articoli WordPress
 * Crea una nuova bozza senza modificare l'articolo originale.
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}


/**
 * Aggiunge il link "Duplica" nella lista degli articoli.
 */
add_filter( 'post_row_actions', function( $actions, $post ) {

	if ( 'post' !== $post->post_type ) {
		return $actions;
	}

	if ( ! current_user_can( 'edit_post', $post->ID ) ) {
		return $actions;
	}

	$url = wp_nonce_url(
		admin_url( 'admin.php?action=backdigit_duplicate_post&post=' . $post->ID ),
		'backdigit_duplicate_post_' . $post->ID
	);

	$actions['backdigit_duplicate'] = '<a href="' . esc_url( $url ) . '">Duplica</a>';

	return $actions;

}, 10, 2 );


/**
 * Esegue la duplicazione dell'articolo.
 */
add_action( 'admin_action_backdigit_duplicate_post', function() {

	if ( ! isset( $_GET['post'] ) ) {
		wp_die( 'Articolo non specificato.' );
	}

	$post_id = absint( $_GET['post'] );

	if ( ! $post_id ) {
		wp_die( 'Articolo non valido.' );
	}

	/**
	 * Controllo sicurezza.
	 */
	check_admin_referer( 'backdigit_duplicate_post_' . $post_id );

	if ( ! current_user_can( 'edit_post', $post_id ) ) {
		wp_die( 'Non hai i permessi necessari per duplicare questo articolo.' );
	}

	$original = get_post( $post_id );

	if ( ! $original || 'post' !== $original->post_type ) {
		wp_die( 'Articolo non trovato.' );
	}


	/**
	 * Crea la nuova bozza.
	 */
	$new_post = array(
		'post_title'    => $original->post_title . ' - Copia',
		'post_content'  => $original->post_content,
		'post_excerpt'  => $original->post_excerpt,
		'post_status'   => 'draft',
		'post_type'     => 'post',
		'post_author'   => get_current_user_id(),
		'post_parent'   => $original->post_parent,
		'menu_order'    => $original->menu_order,
		'comment_status'=> $original->comment_status,
		'ping_status'   => $original->ping_status,
	);

	$new_post_id = wp_insert_post(
		wp_slash( $new_post ),
		true
	);

	if ( is_wp_error( $new_post_id ) ) {
		wp_die(
			'Errore durante la duplicazione: ' .
			esc_html( $new_post_id->get_error_message() )
		);
	}


	/**
	 * Copia categorie e tag.
	 */
	$taxonomies = array(
		'category',
		'post_tag',
	);

	foreach ( $taxonomies as $taxonomy ) {

		$terms = wp_get_object_terms(
			$post_id,
			$taxonomy,
			array(
				'fields' => 'ids',
			)
		);

		if ( ! is_wp_error( $terms ) && ! empty( $terms ) ) {
			wp_set_object_terms(
				$new_post_id,
				$terms,
				$taxonomy
			);
		}
	}


	/**
	 * Copia l'immagine in evidenza.
	 */
	$thumbnail_id = get_post_thumbnail_id( $post_id );

	if ( $thumbnail_id ) {

		set_post_thumbnail(
			$new_post_id,
			$thumbnail_id
		);
	}


	/**
	 * Copia i campi personalizzati.
	 */
	$custom_fields = get_post_meta(
		$post_id
	);

	if ( ! empty( $custom_fields ) ) {

		foreach ( $custom_fields as $meta_key => $meta_values ) {

			foreach ( $meta_values as $meta_value ) {

				add_post_meta(
					$new_post_id,
					$meta_key,
					maybe_unserialize( $meta_value )
				);
			}
		}
	}


	/**
	 * Apre direttamente la nuova bozza.
	 */
	wp_safe_redirect(
		admin_url(
			'post.php?post=' . $new_post_id . '&action=edit'
		)
	);

	exit;

} );

Piccola nota tecnica: ho scelto volutamente di creare la copia come bozza e di assegnarla all’utente che effettua la duplicazione. In questo modo lo snippet è adatto anche a siti con più autori e riduce il rischio di pubblicare accidentalmente una copia.

WordPress

PDF Strumenti PDF gratis Nel browser, senza upload Apri gli strumenti

🔒

Contenuto riservato

Per scaricare questo file devi prima registrarti oppure accedere con il tuo account.