#Hacklab Migration
Plugin to migrate content WordPress.
by Hacklab Team · github.com/everaldomatias/hacklab-migration · website
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.zipDeclares 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_PATHeHACKLAB_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émimport-user/import-terms), o plugin gera um ID sequencial e grava em_hacklab_migration_import_run_idnos 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=1se estiver em single) para trazer logins, senhas, activation_key, capabilities e meta. -
Guest Authors: importe o CPT de autores direto como
guest-authore 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_postjá reaproveita users/guest-authors existentes por slug/login/email; se a origem tem_hacklab_migration_source_meta['authors'], rodewp modify-posts --q:post_type=migration --fn=\\HacklabMigration\\sync_coauthors_pluspara forçar a vinculação. -
Evite manter um CPT
authorparalelo: converta tudo paraguest-authore use apenas o fluxo padrão do CoAuthors Plus (taxonomia internaauthor+ CPTguest-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
- Importar guest-authors (single → single):
-
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=1para o site principal da rede e quer importar outro single sem colidir, use--force_base_prefix=1com umblog_idló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_prefixtambém está disponível emimport-usereimport-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). Oforce_base_prefixsó evita olhar tabelaswp_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