Migrando posts de um Custom post type para outro

Fala dev, hoje vamos falar de algo relativamente simples, porém de bastante importância no dia a dia.

Se você não passou por isso ainda, pode apostar que vai passar.
Essa semana tive que refatorar um custom post type, na verdade tive que criar um novo e migrar todos os conteudos do antigo pra esse, incluindo as taxonomias dele.

Então vamos pro código

$post_type = $_POST['post_type'];
$post_types = [
        'post-type-antigo-1' => [
            'taxonomy' => 'taxonomia-antiga-1',
        ],
        'post-type-antigo-2' => [
            'taxonomy' => 'taxonomia-antiga-2',
        ],
    ];

Nó trecho acima estamos pegando o post type e criando um array, passando o post type e a taxonomia.

$args = array(
        'post_type' => $post_type,
        'posts_per_page' => -1,
        'post_status' => 'any',
    );

    $query = new WP_Query($args);

No trecho acima vamos fazer um consulta com o $_POST[‘post_type’].

$posts = [];
    if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();
            $post_id = get_the_ID();
            $terms = get_the_terms($post_id, $post_types[$post_type] 
            ['taxonomy']);
        }
    }

No trecho acima estamos fazendo um loop, pegando os termos de cada post.

if ( !$taxonomy_new = term_exists($terms[0]->slug, 'new_taxonomy') ) {
    $taxonomy_new = wp_insert_term('Termo novo', 'new_taxonomy');
}

$post->post_type = 'novo-post-type';
$id_post = wp_insert_post($post);

Acima vamos migrar os termos da taxonomia antiga para a nova taxonomia.
Usamos o wp_insert_term para adicionar um novo termo a taxonomia nova.
Depois usamos o $post->post_type = ‘novo-post-type’ para forçar o novo post type e adicionar os posts a ele usando o wp_insert_post.

wp_set_post_terms($id_post, $taxonomy_new['term_id'], 'new_taxonomy');

Em seguida inserimos os termos na nova taxonomia dos posts do post type novo.

Pronto, aqui aprendemos algumas funções nova do WordPress. Aconselho ir na documentação do WP e estudar um pouco mais sobre elas =)

Até mais, Dev.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *