Wie kann ich in WordPress eine Seite kopieren?

Von: Heiko Schneider

Aktualisiert am:

Wie Seite in WordPress kopieren

Man muss das Rad ja nicht immer neu erfinden. Manchmal hat man sich selbst schon eine gute Vorlage für eine Seite erstellt und möchte diese jetzt einfach nur duplizieren, um sie in etwas anderer Form weiterverwenden zu können. Aber wie kann ich in WordPress eine Seite kopieren? Keine Sorge, erkläre ich dir alles in dieser kurzen Anleitung.

Eine Kopierfunktion in deine WordPress Seite einbauen

Von Haus aus bietet WordPress keine Möglichkeit, eine Seite oder Beiträge zu kopieren. Nicht auszuschließen, dass diese Funktion mal irgendwann ihren Weg in den Kern schafft, aber momentan müssen wir uns noch anders behelfen.

Und zwar, indem wir einfach eine Kopierfunktion in deine Website einbauen.

Für Einsteiger geht es jetzt ein wenig an’s Eingemachte, weil wir direkt in den Code deines WordPress Themes eingreifen. Aber kein Grund zur Sorge: ich führe dich da Schritt für Schritt durch.

Schritt 1: Per FTP mit deinem Server verbinden

Um eine Kopierfunktion in deine WordPress Website einzubauen, musst du dich zunächst per FTP mit deinem Server verbinden.

Schritt 2: In dein Theme-Verzeichnis wechseln und die functions.php öffnen

Jetzt wechselst du in das Verzeichnis deines aktuellen Themes, in dem du auch die Datei functions.php findest. Solltest du damit Schwierigkeiten haben, findest du eine sehr gute Anleitung in diesem Artikel.

Hast du die functions.php Datei gefunden, öffnest du sie in deinem bevorzugten Editor.

Ein Editor ist ein Programm, mit dem du Code bearbeiten kannst. Für jemanden, der mit WordPress arbeitet, eine nützliche Angelegenheit. Wenn du noch keinen Editor hast, empfehle ich dir das kostenlose Visual Studio Code.

Schritt 3: Code in die functions.php einfügen

Jetzt kopierst du den folgenden Code komplett unten in deine Datei functions.php und speicherst sie auf dem Server neu.

/*
 * Zusatzfunktion um die Möglichkeit zum Kopieren von Seiten hinzuzufügen. Duplizierte Seiten werden als Entwurf eingestellt. Nach dem Duplizieren wird der Nutzer direkt zum Editor weitergeleitet. 
 */
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('Keine Seite zum Duplizieren angelegt!');
  }
 
  /*
   * Verifikation
   */
  if ( !isset( $_GET['duplicate_nonce'] ) || !wp_verify_nonce( $_GET['duplicate_nonce'], basename( __FILE__ ) ) )
    return;
 
  /*
   * holt sich die ID der Quelle
   */
  $post_id = (isset($_GET['post']) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) );
  /*
   * und dann die Seitendaten
   */
  $post = get_post( $post_id );
 
 
  $current_user = wp_get_current_user();
  $new_post_author = $current_user->ID;
 
  /*
   * wenn Seitendaten existieren, erstelle das Seitenduplikat
   */
  if (isset( $post ) && $post != null) {
 
    /*
     * Array für neue Seite
     */
    $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,
      '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
    );
 
    /*
     * Seite über wp_insert_post() Funktion einfügen 
     */
    $new_post_id = wp_insert_post( $args );
 
    /*
     * Alle Terms holen und dem duplizierten Post zufügen
     */
    $taxonomies = get_object_taxonomies($post->post_type); // wirft Array für Taxonomien für den Post Type aus ("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);
    }
 
    /*
     * mit zwei SQL Queries die Seitenmeta hinzufügen
     */
    $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);
    }
 
 
    /*
     * zum Editor der neuen Seite weiterleiten
     */
    wp_redirect( admin_url( 'post.php?action=edit&post=' . $new_post_id ) );
    exit;
  } else {
    wp_die('Konnte Seite nicht erstellen, konnte Originalseite nicht finden: ' . $post_id);
  }
}
add_action( 'admin_action_rd_duplicate_post_as_draft', 'rd_duplicate_post_as_draft' );
 
/*
 * Duplizieren Link zur Seitenübersicht hinzufügen
 */
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="Duplizieren" rel="permalink">Duplizieren</a>';
  }
  return $actions;
}
 
add_filter('page_row_actions', 'rd_duplicate_post_link', 10, 2);

Hat alles funktioniert, siehst du jetzt einen Link mit dem Titel „Duplizieren“ in der Seitenübersicht deiner WordPress Seite. Und zwar immer dann, wenn du mit der Maus über den Titel einer Seite gehst.

Hast du den Link angeklickt, legt WordPress eine Kopie deiner Seite an und speichert sie als Entwurf. Anschließend wirst du direkt zum Editor der neuen Seite weitergeleitet.

So kannst du mit einem Plugin in WordPress eine einzelne Seite kopieren

Wenn dir das Gefummel am Code deiner Website zu aufwändig ist, gibt’s auch einen ganz simplen Weg. Und wie alle simplen Wege in WordPress, läuft das auch hier über ein Plugin.

Das Plugin Duplicate Post hilft dir dabei, schnell einzelne Seiten und auch Beiträge zu kopieren. Selbst Custom Post Types sind kein Problem.

WordPress Beiträge und Seiten mit einem Plugin kopieren

Sobald du dieses kleine Plugin aktiviert hast, siehst du in den Schnellmenüs in deiner Seitenübersicht einen zusätzlichen Menüpunkt mit dem verheißungsvollen Namen Duplizieren.

Seite duplizieren in WordPress

Klickst du diesen Menüpunkt an, erstellt das Plugin eine exakte Kopie der gewählten WordPress Seite.

Dabei macht das Plugin gleich zwei Dinge absolut richtig:

  • Die Kopie wird mit dem Status „Entwurf“ erstellt
    Du wirst nicht wollen, dass die Kopie gleich veröffentlicht wird. Wahrscheinlich möchtest du sie erstmal bearbeiten, bevor du die neue Seite veröffentlichst.
  • Die Kopie enthält alle Einstellungen der Ursprungsseite
    Es wird eine absolut exakte Kopie erstellt und nicht nur eine Kopie des Inhalts. Das bedeutet, dass alle Einstellungen, die du auf der Ursprungsseite angepasst hast, auch auf der neuen Seite vorhanden sind.

Wichtig!
Der Permalink deiner Seite wird auch 1:1 kopiert. Da keine zwei identischen Permalinks auf einer WordPress Seite existieren können, musst du den Permalink der Kopie auf jeden Fall noch bearbeiten.

Im Artikel „So kannst du in WordPress Permalinks ändern“ erkläre ich dir ganz genau, wie das funktioniert.

So kannst du den Inhalt einer Seite in WordPress in eine andere Seite kopieren

In den meisten Fällen will man ja eigentlich gar nicht die komplette Seite in WordPress kopieren, sondern einfach nur die Inhalte.

Seit Einführung des Gutenberg Editors in WordPress geht das noch wesentlich einfach als vorher. Und zwar mit dem Kontextmenü deiner Seite.

1. Erstelle deine Ursprungsseite

Klar, wenn wir etwas kopieren möchten, müssen wir vorher natürlich etwas erstellen. Im ersten Schritt erstellst du also einfach erstmal deine Ausgangsseite

2. Öffne das Optionsmenü zum Kopieren

Wenn du deinen Content erstellst, befindest du dich im so genannten Gutenberg Editor. Einem Editor, in dem du Blöcke zu deinen Inhalten frei hinzufügen kannst.

Ganz oben rechts in der Ecke siehst du drei untereinander stehende Punkte. Ein Klick auf diese Punkte öffnet das Optionsmenü deiner Seite.

Im Optionsmenü hast du weiter unten den Bereich Werkzeuge. Klicke dort auf „Kompletten Inhalt kopieren„.

Der gesamte Inhalt deiner Seite, inkl. alle Blöcke, Bilder und Formatierungen befindet sich jetzt in deiner Zwischenablage. Wir müssen ihn jetzt nur noch in eine neue Seite einfügen.

3. Füge den Inhalt in eine neue Seite ein

Jetzt musst du nur noch eine neue Seite erstellen und deine Inhalte einfügen.

Dazu gehst du auf der neuen Seite einfach in den Contentbereich unter dem Titel und drückst auf einem Windows Rechner die Tasten STRG+V, bzw. auf einem Mac die Tasten COMMAND+V.

Schon fügt WordPress den kompletten Inhalt deiner Quellseite in die neue Seite ein.

Wichtig!
Wenn du in deinem Administrationsbereich den Gutenberg Editor noch nicht siehst, solltest du dringend deine WordPress Seite updaten. Die Einführung des Gutenberg Editors ist schon eine ganze Weile her. Verfügst du noch nicht über den neuen Editor, ist deine Website stark veraltet!

Unter’m Strich

Die Möglichkeit, eine Seite oder einen Beitrag mal eben fix zu kopieren, ist Gold wert. Ich nutze diese Funktion auf meinen WordPress Seiten wesentlich häufiger, als du denkst. Und spare mir damit immer wertvolle Arbeitszeit, die ich alternativ in eine gute Tasse Kaffee stecken kann 😉

Hast du Fragen zu diesem Artikel? Ich beantworte dir gerne alle Fragen unten in den Kommentaren.

Foto des Autors

Für dich geschrieben von

Heiko Schneider

Hej, ich bin Heiko. Mitbegründer der WPFellows und seit über 15 Jahren professioneller WordPress Entwickler und Trainer. Mehr über Heiko erfahren.
WordPress Fellows

Schreibe einen Kommentar