WP Manifestindependent plugin directory
manifest / updates / hacklab-migration

#Hacklab Migration

Plugin to migrate content WordPress.

★ 0stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/everaldomatias/hacklab-migration/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

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