Duplicar el tipo de publicación personalizada y sus publicaciones

4

Tengo un tipo de publicación personalizada con más de 100 publicaciones. Quiero crear otro tipo de publicación personalizada y tener las mismas publicaciones con los mismos títulos de publicación. ¿Hay una consulta de base de datos simple que me permita hacer esto o estoy atascado con tener que volver a crear cada publicación?

    
pregunta Taylor 02.10.2012 - 13:25

1 respuesta

2

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.

    
respondido por el Brian Fegter 02.10.2012 - 18:51

Lea otras preguntas en las etiquetas