Ibland stöter du på en situation när du vill skapa ett nytt inlägg eller en sida som är identisk med (eller nästan identisk) ett befintligt inlägg eller en sida på din webbplats.

Om inlägget eller sidan är lång eller innehåller mycket media kan processen med att lägga till allt det innehållet igen verka väldigt mödosamt. Om du dessutom har massor av inlägg som kommer att vara mycket lika varandra, kommer det att vara mycket frustrerande att antingen behöva skriva ut all din text igen manuellt eller lägga till alla mediefiler för att skapa dina nya inlägg eller sidor.

Ett alternativ kan vara att öppna upp det befintliga inlägget (för enkelhetens skull kommer vi att använda ”inlägg” för att hänvisa till inlägg och sidor här) i ett webbläsarfönster eller flik, skapa sedan ditt nya inlägg i ett annat fönster och växla mellan de två, och kopiera och klistra in ditt innehåll. När allt kommer omkring gör de senaste (post-Gutenberg) versionerna av WordPress det ganska enkelt, med ett alternativ för att ”kopiera allt innehåll”.

Men om du måste göra det om och om igen finns det risk för att du gör fel. Vad händer om du oavsiktligt redigerar det ursprungliga inlägget och skriver över det innehåll du redan har publicerat på din webbplats? Eller om du har ett stort antal inlägg att kopiera och du förlorar kollen på vilka du har skapat?

Här har du god grogrund för huvudvärk

Lyckligtvis finns det ett enklare sätt. Det finns gratisplugins tillgängliga som låter dig göra dubbletter av dina inlägg och sidor, så att du kan redigera och justera dem för att skapa nya inlägg som är nästan identiska med ditt befintliga innehåll.

I det här inlägget kommer vi att visa dig några av de metoder du kan använda för att göra detta och visa dig några av de bästa pluginsen för uppgiften.

Men först och främst ska vi visa dig hur du duplicerar en sida eller ett inlägg i WordPress på det halvmanuella sättet, utan ett plugin. Detta inkluderar att kopiera och klistra, men WordPress gör det så enkelt att göra det, att om du bara har ett inlägg att kopiera, kommer det förmodligen att vara snabbare än att installera ett plugin och göra det på det sättet.

Så här duplicerar du en sida eller ett inlägg i WordPress, det halvmanuella sättet

Denna metod kan vara snabbare om du bara har ett inlägg att duplicera, eftersom det sparar tid gentemot att installera ett plugin. Om du har en massa inlägg att duplicera, skulle jag dock allvarligt rekommendera att hoppa över det här avsnittet: det kommer vara mycket snabbare, för att inte tala om mer exakt, att använda ett plugin.

Så för er som bara behöver duplicera ett inlägg eller en sida, är det så här du gör det.

Börja med att öppna ditt befintliga inlägg eller sida. Se till att du inte har ett enskilt block valt genom att klicka utanför ett block på ditt inlägg eller välja fliken Dokument i redigeringsfönstret till höger om skärmen. Om du har ett block valt, kommer WordPress bara kopiera innehållet i det blocket och inte hela dokumentet.

Klicka nu på ellipsen längst upp till höger på redigeringsskärmen (tre punkter ovan varandra).

Alternativet Kopiera allt innehåll i WordPress
Alternativet Kopiera allt innehåll i WordPress

En meny kommer visas. Långt ner på den här menyn ser du alternativet Kopiera allt innehåll. Klicka på det och du får ett meddelande som berättar att ditt innehåll har kopierats.

Skapa nu ditt nya inlägg. Ge ditt inlägg en titel och klicka sedan i det första tomma blocket som har skapats åt dig på redigeringsskärmen. Använd kortkommandon på ditt tangentbord för att klistra in (Ctrl + V på en PC, Cmd + V på en Mac, eller högerklicka och välj Klistra in i snabbmenyn som visas.

Innehållet i ditt äldre inlägg kommer nu att visas i ditt nya inlägg. Som ren magi! (Okej, kanske inte.)

Nu kan du redigera det inlägget och göra det annorlunda än det äldre inlägget. Detta är något jag starkt rekommenderar att göra – det finns inte så stor anledning att ha blogginlägg som är exakta dubbletter av varandra på din webbplats. Inte bara kommer det att förvirra besökare, men det är också dåligt för din SEO.

Men vad händer om du vill skapa flera dubbletter av ditt inlägg? Läs vidare…

Så här duplicerar du en sida eller ett inlägg i WordPress med ett plugin

Det överlägset snabbaste, enklaste och mest tillförlitliga sättet att duplicera inlägg är med hjälp av ett plugin. Detta kommer att låta dig spara tid, undvika mänskliga fel, och kopiera alla inläggstyper du vill. Enligt vår erfarenhet är det faktiskt vanligare att duplicera inlägg med anpassade inläggstyper. Det är ovanligt att ha två blogginlägg som är nästan identiska med varandra, men det är ganska vanligt för produkter i en butik, till exempel.

Det här är några plugins som gör processen att duplicera inlägg enkel, och vägledning om hur du använder dem.

WooCommerce

Du kanske undrar varför jag har inkluderat WooCommerce här, eftersom det är ett e-handelsplugin, inte ett inläggsdupliceringsplugin.

Men det är värt att veta att WooCommerce låter dig duplicera produkter utan att installera ett extra plugin. Så innan du börjar söka efter ett inläggsdupliceringsplugin och använda det för att duplicera dina produkter, kan du bara använda de funktioner som kommer med WooCommerce.

Om du går till produktskärmen i WooCommerce och håller muspekaren över en produkt ser du en Duplicera-länk under det inlägget.

WooCommerce -alternativet duplicera produkt
WooCommerce -alternativet duplicera produkt

Klicka bara på Duplicera-länken och en ny produkt kommer att skapas. Du kommer att tas direkt till redigeringsskärmen för den nya produkten så att du kan göra ändringar i den och sedan publicera den.

Det är värt att notera att sluggen för den nya produkten kommer att vara samma slug som för den gamla produkten med -copy tillagt, så även om du ändrar titeln på den nya produkten, måste du också redigera sluggen.

Redigera en duplicerad produkt
Redigera en duplicerad produkt

Duplicate Post

Duplicate Post är det mest populära pluginet för att duplicera inlägg, med över 3 miljoner nedladdningar.

När du har aktiverat det lägger det till en Klona-länk till varje inlägg på huvudskärmen i WordPress-adminpanelen.

Duplicate Post-pluginet
Duplicate Post-pluginet

Klicka på Klona-länken under det inlägg du vill duplicera, och ett nytt inlägg kommer att skapas åt dig med samma innehåll och titel och Utkast-status.

Du kan sedan redigera det nya inlägget och ge det en ny titel (något jag starkt rekommenderar – WordPress låter dig duplicera titlar men det är inte så bra för användarupplevelsen).

Det lägger också till samma Klona-länk till sidor och för anpassade inläggstyper (om du aktiverar dem i inställningarna).

Duplicate Page

Pluginet Duplicate Page har haft över 900 000 nedladdningar och är ett alternativ till Duplicate Post-pluginet ovan.

När du har installerat pluginet, gå till adminskärmen för inlägg eller sidor, eller till adminskärmen för din anpassade inläggstyp, och du hittar en Duplicera denna-länk under varje inlägg. Här är min med en anpassad inläggstyp:

Duplicate Page-pluginet
Duplicate Page-pluginet

Klicka på länken så får du ett nytt inlägg (eller en sida eller ett inlägg av din anpassade inläggstyp) med samma innehåll och titel som det ursprungliga inlägget, med utkast som status. Du måste redigera det och ändra dess slug innan du publicerar det.

Observera: Om du använder WooCommerce kommer Duplicera denna-länken från detta plugin inte att visas på skärmen Produkter. WooCommerce åsidosätter detta med sin egen Duplicera-länk som jag beskrev tidigare i det här inlägget.

Så här duplicerar du flera inlägg eller sidor på en gång

De plugins som jag redan har nämnt låter dig duplicera inlägg ett i taget. Men vad händer om du behöver duplicera alla inlägg på din webbplats, eller alla inlägg av en anpassad inläggstyp? Eller kanske alla inlägg du publicerade i år?

Pluginet WP Bulk Post Duplicator låter dig göra just det. Istället för att lägga till en länk för att duplicera enskilda inlägg, ger det dig en inställningsskärm som låter dig duplicera inlägg i mängder enligt kriterier du ställer in.

Observera: Detta plugin har inte uppdaterats på två år, i skrivande stund, så vi rekommenderar att du installerar det på en utvecklingswebbplats och testar det innan du använder det på en livewebbplats. Vi använde det på vår testwebbplats utan problem.

När du har installerat pluginet, gå till Inställningar > WP Bulk Post Duplicator för att se inställningsskärmen för pluginet.

Börja med att välja de inläggstyper du vill duplicera samt inläggsstatus. Så om du väljer inlägg och publicerade, kommer pluginet duplicera alla dina publicerade inlägg. Om du istället väljer inlägg och utkast, kommer det bara duplicera alla dina inläggsutkast.

Bulk Duplicate-Inställningar - inläggstyp och status
Bulk Duplicate-Inställningar – inläggstyp och status

Bläddra ner och välj året för de inlägg du vill duplicera (detta är valfritt). Du kan också ange status för de nya inlägg som kommer skapats. Om inte du väljer något här kommer de läggas som Utkast som standard.

Bulk Duplicate-inställningar - år och publiceringsstatus
Bulk Duplicate-inställningar – år och publiceringsstatus

Klicka på knappen Duplicera och pluginet kommer att duplicera dina inlägg. Här kan du se alla mina sidor duplicerade, med 12 befintliga publicerade sidor, och 12 nya utkastsidor. Jag måste sedan arbeta igenom alla sidor och redigera dem innan jag publicerar dem. Det kommer naturligtvis att ta tid, men det har gjorts snabbare med hjälp av pluginet.

Skriv ditt eget inläggsdupliceringsplugin

Vad händer om du inte vill använda ett tredjepartsplugin för att duplicera inlägg och hellre vill koda ditt eget?

Inga problem. Följ bara dessa steg för att skapa ditt eget inläggsdupliceringsplugin.

1. Konfigurera pluginet

Börja med att konfigurera pluginet. Lägg till en ny fil i mappen wp-content/plugins och lägg till den här utkommenterade texten till den (du kan redigera den för att återspegla dina egna uppgifter):

<?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. Skapa funktionen

Lägg nu till funktionen för duplicering av inlägg och haka fast den i en åtgärdskrok. Denna åtgärdskrok existerar inte ännu, men oroa dig inte, vi kommer att skapa den inom kort.

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

Låt oss nu skapa den åtgärden, som kommer som en del av en funktion för att lägga till dupliceringslänken till inlägg och sidor.

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);

Detta kommer att lägga till länken för duplicering, men det kommer inte att duplicera någonting än.

3. Lägga till dupliceringsfunktionalitet

Låt oss lägga till koden för duplicering. Hela resten av koden går in i din tomma kinsta_duplicate_post()-funktion.

Låt oss först kontrollera att ett giltigt inlägg har valts och kontrollera om det finns en nonce, för säkerhets skull:

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;
}

Nu måste vi hämta inläggets ID som ska dupliceras, tillsammans med dess data:

// 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 );

Vi kan använda det för att definiera en rad argument och infoga ett nytt inlägg i databasen, med hjälp av wp_insert_post(), men först lägger du till ett villkorligt uttalande för att kontrollera att inlägget inte är null:

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

}

Lägg till detta i det villkorliga uttalandet:

// 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 );

Nu hämtar vi taxonomierna från det gamla inlägget och lägger till dem i det nya:

// 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 );
}

Och sedan lägger vi till lite extra inläggsmetadata, med hjälp av en SQL-förfrågan:

// 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 );

}

Slutligen kontrollerar vi vilken inläggstyp inlägget är och omdirigerar till den relevanta skärmen.

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

Utanför parenteserna för if ( isset( $post ) && $post != null )-kontrollen lägger vi nu till ett felmeddelande:

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' ) );
}

Och det var allt!

Hela Pluginet

Här är den fullständiga koden för pluginet:

<?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);

Du kan också hitta hela pluginet på github.

Grattis! Du har nu ditt eget plugin för att duplicera inlägg och sidor i din WordPress-webbplats.

Källor: denna kod skrevs delvis med hänvisning till ett inlägg på Hostinger-bloggen.

Sammanfattning

Att använda ett plugin för att duplicera inlägg och sidor kan vara snabbare än att göra det manuellt och kan ta bort risken för fel vid kopiering av innehåll.

Om du bara har ett inlägg att kopiera, kan det vara snabbare att använda den inbyggda ”kopiera allt innehåll”-funktionen i WordPress, men för mer än ett inlägg lönar det sig att använda ett plugin. Om du använder något av de plugins som anges ovan, eller kanske kodar ditt eget kommer du att kunna duplicera så många inlägg, sidor eller anpassade inläggstyper du vill.

Om du gör det på det här sättet sparar du tid och (ännu viktigare) tar bort risken för att du oavsiktligt redigerar ditt ursprungliga inlägg när du borde ha redigerat dubblettinlägget.