WP Manifestindependent plugin directory
manifest / updates / hacklab-migration

#Hacklab Migration

Plugin to migrate content WordPress.

by Hacklab Team · github.com/everaldomatias/hacklab-migration · website

0stars
0forks

Install

No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:

wp plugin install https://github.com/everaldomatias/hacklab-migration/archive/refs/heads/main.zip

Declares an update source (hhttps://hacklab.com.br/plugins/hacklab-migration), so updates arrive through the plugin's own updater.

Readme

Hacklab Migration

Changelog

0.0.20 - Evita sobrescrever o post_type ao atualizar um post já importado.

0.0.19 - Refatora comando run-import para ser completo (importando termos, metas, imagens com search-replace no content, etc).

  • Correção no prefixo das imagens;
  • Adiciona parâmetros lang e search-replace no comando run-import;
  • Melhora o suporte ao WPML, definindo o idioma padrão ao importar;
  • Remove parâmetro write_mode
  • Adiciona função stop_the_insanity() para melhor a performance das ações no WP local;
  • Corrige bug na função find_local_post() para pesquisar também no post_type = page.

0.0.1 - Versão inicial

Compilação dos assets

Na pasta do plugin instale as dependências com npm install. Para rodar o compilador em formato de desenvolvimento, execute npm run dev. E para compilar os assets para produção, execute npm run production.

Sugestão de fluxo de importação

  • Importar arquivos da pasta /uploads, via rSync ou FTP;
  • Importar taxonomias e seus respectivos termos;
  • Importar usuários;
  • Importar CoAuthors;
  • Importar posts;
  • Rodar o corretor de relacionamento de imagens;
  • Rodar o search/replace.

Comandos WP CLI disponíveis

wp run-import

Executa o fluxo completo de importação: busca posts no ambiente remoto, importa/atualiza localmente, processa mídia (opcional) e executa callbacks pré/pós (opcionais). Os argumentos de busca usam o prefixo q: — os demais controlam o comportamento da importação.

Exemplos

Importar 50 posts publicados

wp run-import q:numberposts=50 q:post_status=publish

Importar posts de tipos específicos

wp run-import q:post_type=post,page q:numberposts=100

Simular a importação (sem gravar nada)

wp run-import dry_run=1 q:numberposts=200

Importar apenas IDs específicos

wp run-import q:include=10,20,30

Executar callbacks antes e depois da importação

wp run-import fn_pre=\\Utils\\change_post_type fn_pos=fn_pre=\\Utils\\fix_metadata

Reescrever URLs de mídia antigas durante a importação

wp run-import --uploads_base=https://site-antigo.com/wp-content/uploads

Importar somente a 1ª etapa (posts brutos), para um post type temporário e sem termos/mídia:

wp run-import target_post_type=migration assign_terms=0 media=0 q:numberposts=200

Modificar posts na importação:

  • Meta extra: wp run-import meta:campo_extra="valor"
  • Forçar post type: wp run-import post_type:conteudo
  • Adicionar termos: wp run-import add:category="Noticias,Eventos"
  • Substituir termos: wp run-import set:tag="tag1,tag2"
  • Remover termos: wp run-import rm:category="Antigo"

Aplicar regras DE/PARA após importação (usando hacklab-dev-utils):

  • Defina os caminhos no wp-config.php: HACKLAB_MIGRATION_DE_CSV_PATH e HACKLAB_MIGRATION_PARA_CSV_PATH
  • Execute: wp modify-posts --q:post_type=migration --fn:\\HacklabMigration\\apply_de_para_from_csv

Atualizar autor local (a partir de _hacklab_migration_remote_author):

  • Execute: wp modify-posts --q:post_type=migration --q:meta_query="_hacklab_migration_source_id:415:=" --fn:\\HacklabMigration\\map_remote_author_to_local

Rastrear execuções de importação (run_id):

  • A cada run-import (e também import-user / import-terms), o plugin gera um ID sequencial e grava em _hacklab_migration_import_run_id nos itens tocados (posts, attachments, users e termos).
  • Exemplo de rollback (posts): SELECT ID FROM wp_postmeta WHERE meta_key = '_hacklab_migration_import_run_id' AND meta_value = 42;

Migrar CoAuthors Plus

  • Usuários: use wp import-user <blog_id> (com --force_base_prefix=1 se estiver em single) para trazer logins, senhas, activation_key, capabilities e meta.

  • Guest Authors: importe o CPT de autores direto como guest-author e converta no pós-insert:

    • wp run-import <blog_id> --q:post_type=guest-author --post_type=guest-author --with_media=0 --assign_terms=0 --fn_pos=\\HacklabMigration\\cap_convert_post_to_guest_author
    • Isso cria/atualiza guest-authors preservando metas cap- e marcando `_hacklab_migrationsource`.
  • Posts: no import normal, cap_assign_coauthors_to_post já reaproveita users/guest-authors existentes por slug/login/email; se a origem tem _hacklab_migration_source_meta['authors'], rode wp modify-posts --q:post_type=migration --fn=\\HacklabMigration\\sync_coauthors_plus para forçar a vinculação.

  • Evite manter um CPT author paralelo: converta tudo para guest-author e use apenas o fluxo padrão do CoAuthors Plus (taxonomia interna author + CPT guest-author).

  • Exemplos rápidos:

    • Importar guest-authors (single → single): wp run-import 1 --q:post_type=guest-author --post_type=guest-author --with_media=0 --assign_terms=0 --fn_pos=\\HacklabMigration\\cap_convert_post_to_guest_author
    • Importar guest-authors com force_base_prefix (blog lógico 99): wp run-import 99 --force_base_prefix=1 --q:post_type=guest-author --post_type=guest-author --with_media=0 --assign_terms=0 --fn_pos=\\HacklabMigration\\cap_convert_post_to_guest_author
    • Sincronizar coautores a partir do meta: wp modify-posts --q:post_type=migration --fn=\\HacklabMigration\\sync_coauthors_plus
  • Requerimento: o plugin CoAuthors Plus precisa estar ativo durante esses comandos para que guest-authors e vínculos funcionem.

Importar single ➜ single junto com multisite já importados (evitar colisão de blog_id):

  • Se você já usou blog_id=1 para o site principal da rede e quer importar outro single sem colidir, use --force_base_prefix=1 com um blog_id lógico diferente (ex.: 99). Exemplo: wp run-import 99 --force_base_prefix=1 --q:post_type=post --post_type:migration ... Isso consulta as tabelas base (wp_posts/wp_postmeta) e grava _hacklab_migration_source_blog=99, evitando conflito com importações anteriores.
  • A flag --force_base_prefix também está disponível em import-user e import-terms.
  • Atenção: termos continuam sendo deduplicados por slug/nome, e attachments são deduplicados por _wp_attached_file (com prefixo de blog no nome quando aplicável). O force_base_prefix só evita olhar tabelas wp_X_.

Importar por data de modificação

wp run-import q:post_modified_gmt=2024-01-01

Exemplos com last-modified:

  • Posts modificados após data/hora (GMT): wp run-import 1 --q:post_modified_gmt="2024-01-01 00:00:00"
  • Janela de modificação (entre datas): wp run-import 1 --q:modified_after="2024-01-01" --q:modified_before="2024-02-01"
  • Ordenar por modificação mais recente: wp run-import 1 --q:post_type=post --q:orderby=post_modified_gmt --q:order=DESC --q:numberposts=50

Read the full README on GitHub →