Copia de seguridad de su base de datos
Puedes hacer esto con bastante facilidad. He creado una prueba de concepto para que pruebes. Yo haría una copia de seguridad de la base de datos antes de ejecutar esto.
Ejecutar el complemento
Configure el complemento configurando las variables $post_type_1
y $post_type_2
para sus tipos de publicación de origen y destino.
Para ejecutar este complemento, debe iniciar sesión como administrador. Luego, visite:
enlace
/*
Plugin Name: Post Duplicator
Description: Duplicate posts to a new post type
Version: 0.1
Author: WPSE
Author URI: http://wordpress.stackexchange.com
License: GPL2
*/
add_action('admin_init', 'foo_duplicate_posts', 99999);
function foo_duplicate_posts(){
# Only allow admins to run the script
if(!current_user_can('manage_options'))
return;
# Check if keyword is set
if(!isset($_GET['duplicate-posts']))
return;
# Check if keyword matches
if($_GET['duplicate-posts'] !== 'magic-password')
return;
global $wpdb;
# Configure post types
$post_type_1 = 'foo';
$post_type_2 = 'bar';
$query = $wpdb->prepare("SELECT * FROM $wpdb->posts WHERE post_type = '%s'", $post_type_1);
$posts = $wpdb->get_results($query, ARRAY_A);
foreach($posts as $post){
# Post info is already stored in an array
# Set the post_type to the new post type
$post['post_type'] = $post_type_2;
# Insert new post
$new_post = wp_insert_post($post);
# Proceed if new post was created
if($new_post){
# Print a success message to the screen
show_message("{$post['post_title']} was duplicated from #$post['ID'] to #$new_post");
# Get source post's post meta
$post_meta = get_post_custom($post['ID']);
# Convert all postmeta to new post
if(is_array($post_meta))
foreach($post_meta as $k => $v)
update_post_meta($new_post, $k, $v[0]);
}
else
# Print an error message to the screen
show_message("{$post['post_title']} was not duplicated.");
}
# Stop the admin area from loading to get a clean reading of our output messages
exit;
}
Este complemento cuenta con la información básica de la publicación y su postmeta. No tiene en cuenta las revisiones, los borradores automáticos ni los archivos adjuntos. Puede ejecutar bucles similares dentro del bucle foreach para duplicar esos tipos de publicaciones secundarias.