Mit den Bordmitteln ist es nicht möglich, eine WordPress Seite duplizieren zu können. Hierfür müssen auf andere Möglichkeiten zurückgreifen.
Obwohl es sich um ein eigentlich recht simples Anliegen handelt, können Sie von Hause aus in WordPress keine Seite duplizieren, ohne dafür auf Plugins oder Anpassungen zu setzen.
Welche Möglichkeiten es hierfür grundsätzlich gibt, haben wir Ihnen im Folgenden zusammengetragen.
WordPress Seite duplizieren mithilfe eines Plugins
Es gibt eine ganze Reihe an Plugins, mit denen Sie eine Seite oder einen Beitrag in WordPress kopieren beziehungsweise duplizieren können. Obwohl Sie grundsätzlich auf Plugins in WordPress verzichten sollten, können Sie für diesen Anwendungsfall überlegen, ob Sie darauf zurückgreifen.
Dies kann der einzige Weg für Sie sein, wenn Sie die alternative Methode, bei der Sie dieses Ziel mithilfe eines Codes erreichen, zu kompliziert ist oder Sie abschreckt.
In diesem Beispiel haben wir uns für das Plugin Copy & Delete Posts entschieden. Es ist kostenfrei und sowohl Seiten, als auch Beiträge können damit dupliziert werden. Sie können das Plugin auch in einer Multisite-Umgebung benutzen. Hierfür müssen Sie jedoch die Premium-Variante erwerben, die aktuell ungefähr 20 $ kostet.
Haben Sie das Plugin installiert, erscheint unter Ihren Beiträgen und Seiten ein Link mit der Beschriftung „Kopieren“. Sie können den Link entweder direkt klicken, um einen Beitrag oder eine Seite zu duplizieren, oder aus dem sich öffnenden Fenster noch weitere Optionen wählen.
Hierzu zählen beispielsweise die Anzahl der Kopien oder auch eine andere Webseite innerhalb Ihrer WordPress-Multisite, in die Sie den Beitrag oder die Seite kopieren möchten.
WordPress Seite duplizieren mithilfe von Code
Einen weiteren Ansatz, ohne ein Plugin zu benutzen, hat die Seite wpengine.com beschrieben. Hierzu müssen Sie lediglich dieses Code-Schnippsel in Ihrer Seite einbauen. Dies können Sie beispielsweise in der functions.php erledigen.
/*
* 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,
'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);
Code, um eine WordPress Seite duplizieren zu können, functions.php
Hierdurch erhalten Sie unter Ihren Beiträgen und Seiten einen Link mit der Aufschrift „Duplicate“. Klicken Sie ihn, wird der entsprechende Beitrag kopiert und geöffnet. Beachten Sie hierbei jedoch, dass direkte Änderungen in die Datenbank geschrieben werden.
Dies ist bei vielen WordPress-Administratoren und -Administratorinnen nicht der beliebteste Weg und entspricht auch nicht den Best Practices zu WordPress. Wägen Sie daher ab, ob Sie sich für diesen Weg entscheiden, oder in diesem Falle lieber auf ein Plugin setzen.
Für welchen Weg haben Sie sich entschieden? Benutzen Sie vielleicht sogar ein anderes Plugin dafür? Wenn ja, was hat Sie an dem entsprechenden Plugin überzeugt? Wir sind auf Ihre Meinung gespannt. Wissen Sie eigentlich, was Security Header sind, wie Sie Security Header in WordPress benutzen können und warum Sie das tun sollten?