Duplicando o tipo de postagem personalizado e suas postagens

4

Eu tenho um tipo de postagem personalizado com mais de 100 postagens. Quero criar outro tipo de postagem personalizado e ter as mesmas postagens com os mesmos títulos de postagens. Existe uma consulta de banco de dados simples que me permita fazer isso, ou estou preso a ter que recriar cada post?

    
por Taylor 02.10.2012 / 13:25

1 resposta

2

Backup do seu banco de dados

Você pode fazer isso facilmente. Eu criei uma prova de conceito para você experimentar. Eu faria backup do banco de dados antes de executar isso.

Execute o plug-in

Configure o plug-in definindo as variáveis $post_type_1 e $post_type_2 para seus tipos de postagem de origem e destino.

Para executar este plugin, você precisa estar logado como administrador. Então, 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 plugin responde pela informação básica da postagem e sua postagem. Não considera revisões, rascunhos automáticos ou anexos. Você pode executar loops semelhantes dentro do loop foreach para duplicar os tipos de sub-postagens.

    
por Brian Fegter 02.10.2012 / 18:51