Grandes Migrações: Passando de Qualquer Plataforma Para o WordPress
1. ¸˜
Introducao
Sistemas
¸˜
Migracoes
¸˜
Consideracoes Finais
¸˜
Grandes Migracoes
Passando de Qualquer Plataforma
Para o WordPress
Vinicius Massuchetto
WordCamp Curitiba 2012
Junho de 2012
Vinicius Massuchetto ¸˜
Grandes Migracoes
2. ¸˜
Introducao ¸˜
Introducao
Sistemas ¸˜
Motivacao Para o Cliente
¸˜
Migracoes ¸˜
Motivacao Para a Equipe de Desenvolvimento
¸˜
Consideracoes Finais Na verdade..
Download
¸˜ ´
Esta apresentacao esta dispon´vel em:
ı
https://github.com/viniciusmassuchetto/
wordpress-presentation-migrations
Vinicius Massuchetto ¸˜
Grandes Migracoes
3. ¸˜
Introducao ¸˜
Introducao
Sistemas ¸˜
Motivacao Para o Cliente
¸˜
Migracoes ¸˜
Motivacao Para a Equipe de Desenvolvimento
¸˜
Consideracoes Finais Na verdade..
Sobre o Que Falaremos
Por que tratar do assunto
¸˜
Migracoes no WordPress
¸˜
Migracoes em plaraformas suportadas
¸˜
Migracoes de outras plataformas
´ ¸˜
Estrategias de migracao
Vinicius Massuchetto ¸˜
Grandes Migracoes
4. ¸˜
Introducao ¸˜
Introducao
Sistemas ¸˜
Motivacao Para o Cliente
¸˜
Migracoes ¸˜
Motivacao Para a Equipe de Desenvolvimento
¸˜
Consideracoes Finais Na verdade..
¸˜
Por que falar sobre migracoes com o Cliente?
¸˜ ´
Indexacao de conteudo
¸˜
Manutencao de usabilidade
¸˜ ´
Reestruturacao do conteudo
Vinicius Massuchetto ¸˜
Grandes Migracoes
5. ¸˜
Introducao ¸˜
Introducao
Sistemas ¸˜
Motivacao Para o Cliente
¸˜
Migracoes ¸˜
Motivacao Para a Equipe de Desenvolvimento
¸˜
Consideracoes Finais Na verdade..
¸˜
Por que falar sobre migracoes com a equipe de
desenvolvimento?
´
Analise de complexidade
´ ¸˜ ¸˜
Analise de correlacao e criacao de estruturas
¸˜
Resolucao de velhos problemas
¸˜ ´
Definicao de estrategias
¸˜
Delegacao de tarefas
¸˜
Elaboracao de manuais
¸˜
Definicao do tempo de projeto
Vinicius Massuchetto ¸˜
Grandes Migracoes
6. ¸˜
Introducao ¸˜
Introducao
Sistemas ¸˜
Motivacao Para o Cliente
¸˜
Migracoes ¸˜
Motivacao Para a Equipe de Desenvolvimento
¸˜
Consideracoes Finais Na verdade..
¸˜ ˜
E na verdade, as migracoes sao..
Uma etapa de projeto que poderia ser melhor discutida
¸˜
Uma das partes mais importantes da implantacao de
projetos web
Vinicius Massuchetto ¸˜
Grandes Migracoes
7. ¸˜
Introducao
Sistemas WordPress → WordPress
¸˜
Migracoes Sistemas Suportados
¸˜
Consideracoes Finais
˜ ¸˜
O que sao migracoes para o WordPress?
WordPress → WordPress
Plataformas Suportadas → WordPress
Outras Plataformas → WordPress
Vinicius Massuchetto ¸˜
Grandes Migracoes
8. ¸˜
Introducao
Sistemas WordPress → WordPress
¸˜
Migracoes Sistemas Suportados
¸˜
Consideracoes Finais
WordPress → WordPress
Geralmente tranquila quando feita corretamente
¸˜
Requere menos processamento e recuperacao de
´
conteudos externos
Casos:
˜
Quando a URL nao muda
Quando a URL muda
Vinicius Massuchetto ¸˜
Grandes Migracoes
9. ¸˜
Introducao
Sistemas WordPress → WordPress
¸˜
Migracoes Sistemas Suportados
¸˜
Consideracoes Finais
WordPress → WordPress: Mesma URL
Copiar a base
Modificar o wp-config.php
Vinicius Massuchetto ¸˜
Grandes Migracoes
10. ¸˜
Introducao
Sistemas WordPress → WordPress
¸˜
Migracoes Sistemas Suportados
¸˜
Consideracoes Finais
WordPress → WordPress: Mesma URL
mysqldump -u user -ppass db | bzip2 > dump.sql.bz2
scp dump.sql.bz2 user@host:˜/
ssh user@host "bunzip2 dump.sql.bz2"
ssh user@host "mysql -u user -ppass db < dump.sql"
Vinicius Massuchetto ¸˜
Grandes Migracoes
11. ¸˜
Introducao
Sistemas WordPress → WordPress
¸˜
Migracoes Sistemas Suportados
¸˜
Consideracoes Finais
WordPress → WordPress: URLs Diferentes
No WordPress, muitas URLs ficam persistentes no banco
de dados
˜
Buscar e substituir nao resolve
Vinicius Massuchetto ¸˜
Grandes Migracoes
19. ¸˜
Introducao
Sistemas WordPress → WordPress
¸˜
Migracoes Sistemas Suportados
¸˜
Consideracoes Finais
WordPress → Suportados
Blogger
LiveJournal
Movable Type
RSS
Tumblr
Vinicius Massuchetto ¸˜
Grandes Migracoes
20. ¸˜
Introducao
Sistemas WordPress → WordPress
¸˜
Migracoes Sistemas Suportados
¸˜
Consideracoes Finais
WordPress → Suportados
´ ¸˜
Procedimento direto atraves de arquivos de exportacao
´
Para mudanca de URLs deve-se recorrer a metodos
¸
similares as migracoes WordPress → WordPress.
` ¸˜
Vinicius Massuchetto ¸˜
Grandes Migracoes
21. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
´
Topicos a Serem Levados em Conta
Tecnologia
Estrutura
ˆ ¸˜
Referencias e relacoes internas
´
Conteudo
M´dias
ı
URLs
Vinicius Massuchetto ¸˜
Grandes Migracoes
22. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
Tecnologias Empregadas
¸˜
Configuracao dos servidores
ˆ ¸˜
(safe mode, parametros de compilacao)
ini set("memory limit", -1)
set time limit(0)
ou.. ajax recursivo
Sistema de banco de dados da estrutura a ser migrada
¸˜
Modo de obtencao de dados (socket, webservice, csv)
¸˜
Linguagem a serem escritos os scripts de migracao
ˆ
Preferencia: PHP, MySQL, de dentro do WordPress
Vinicius Massuchetto ¸˜
Grandes Migracoes
23. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
Tecnologias Empregadas
´ ´
Migrar atraves do proprio WordPress:
¸˜ ¸˜
Facilidade e padronizacao de manipulacao dos dados
Garantia de integridade
Vinicius Massuchetto ¸˜
Grandes Migracoes
24. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
Tecnologias Empregadas: wpdb
Classe wpdb
query()
get results()
get var()
Vinicius Massuchetto ¸˜
Grandes Migracoes
25. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
Tecnologias Empregadas: wpdb
global $db;
$db = new wpdb(
IMPORT_USER,
IMPORT_PASS,
IMPORT_DB,
IMPORT_SERVER);
Vinicius Massuchetto ¸˜
Grandes Migracoes
26. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
Tecnologias Empregadas: Tratamento
¸˜
Funcoes de tratamento:
remove accents()
sanitize title()
normalize whitespace()
make clickable()
capital P dangit()
Vinicius Massuchetto ¸˜
Grandes Migracoes
27. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
¸˜
Tecnologias Empregadas: Abstracao de Banco
¸˜ ¸˜
Funcoes de relacao com o banco de dados:
wp insert post()
wp insert term()
wp set post terms()
wp insert attachment()
wp update attachment metadata()
update post meta()
Vinicius Massuchetto ¸˜
Grandes Migracoes
28. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
Tecnologias Empregadas: Exemplo de Rotina
$bd = new wpdb(..);
$sql = "
SELECT ...
FROM ...
";
foreach ($bd->get_results($sql) as $p) {
/* formatacao de $post_attrs com base em $p */
wp_insert_post($post_attrs);
}
Vinicius Massuchetto ¸˜
Grandes Migracoes
31. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
Estrutura: Mapeamento
¸˜
Identificacao das entidades (post types)
¸˜
Identificacao dos atributos (custom fields)
¸˜ ¸˜ ¸˜
Identificacao das relacoes (taxonomias ou relacoes de
plugins)
Vinicius Massuchetto ¸˜
Grandes Migracoes
32. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
Estrutura: Mapeamento
Exemplo: Linha de tabela estabelecimento
(int) id
(str) nome
(str) descricao
(str) rua
(str) bairro
(fk) cidade
(fk) estado
(fk) tipo
(fk) foto
Vinicius Massuchetto ¸˜
Grandes Migracoes
33. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
Estrutura: Mapeamento
Post type estabelecimento
post title: nome
post content: descricao
Chaves meta
meta key: rua
meta key: bairro
meta key: id
Taxonomia
Tipo de Estabelecimento
Anexo
Foto
Vinicius Massuchetto ¸˜
Grandes Migracoes
34. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
Estrutura: Mapeamento
cidade (??)
estado (??)
¸˜
Solucoes poss´veis:
ı
Taxonomia
post parent
¸˜
Relacao via custom fields
¸˜
Relacao via plugin
(Advanced Custom Fields, Post Relationships)
Vinicius Massuchetto ¸˜
Grandes Migracoes
35. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
¸˜
Relacoes Internas
¸˜
Solucao depende do escopo de projeto
ˆ
Algumas transferencias devem ser em camadas
¸˜
(relacoes recursivas)
Exemplos:
Taxonomia “Tipo de Estabelecimento”
´
Itens “Leia tambem” de um post
Vinicius Massuchetto ¸˜
Grandes Migracoes
36. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
¸˜ ¸˜
Relacoes Internas: Insercao sob Demanda
require_once(ABSPATH . ’wp-admin/includes/taxonomy.php’);
function get_or_create_category($cat_name) {
if ($cat_id = get_cat_ID($cat_name))
return $cat_id;
$cat_id = wp_create_category($cat_name);
return $cat_id;
}
Vinicius Massuchetto ¸˜
Grandes Migracoes
37. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
¸˜ ¸˜
Relacoes Internas: Primeira camada de migracao
foreach ($posts as $p) {
/* Post ja importado */
if ($id = get_new_id($p->id))
continue;
/* Insere post sem nenhum conteudo */
$post_attrs = get_new_post_attrs($p);
$post_id = wp_insert_post($post_attrs);
update_post_meta($post_id, ’_old_id’, $p->id);
}
Vinicius Massuchetto ¸˜
Grandes Migracoes
38. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
¸˜ ´
Formatacao: Basicamente o conteudo
¸˜ ´ ´
Elaboracao de inventario de conteudo
˜
Conversao de caminhos
˜
Conversao de embeds em shortcodes
˜ ´
Conversao de estruturas HTML editaveis
¸˜
Remocao de scripts
Vinicius Massuchetto ¸˜
Grandes Migracoes
40. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
¸˜
Migracao de M´dias
ı
˜ ´
Nao se contentar com as m´dias inseridas no conteudo
ı
Sem rastreabilidade pelo software
` ´
Sujeitas a estrutura propria de armazenamento
´
Montar tambem a biblioteca de m´dias e galerias do
ı
´
conteudo
Vinicius Massuchetto ¸˜
Grandes Migracoes
41. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
¸˜
Migracao de M´dias
ı
preg_match_all(’/<img[ˆ>]*src *= *["’]?([ˆ"’]*)/i’,
$post_content, $media);
foreach ($media[1] as $img_url) {
/* (2) */
}
Vinicius Massuchetto ¸˜
Grandes Migracoes
47. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
URLs
´ ˆ
Para cada conteudo migrado, sempre guardar a referencia
´
para o conteudo antigo
Na nova estrutura, verificar os meios de acesso no
´
conteudo e redirecionar para o novo.
Casos:
ˆ
A partir de referencias $ REQUEST
A partir de regras de URL
Vinicius Massuchetto ¸˜
Grandes Migracoes
48. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
ˆ
URLs: Referencias $ REQUEST
add_action(’wp’, ’check_migrated’);
function check_migrated() {
if (!isset($_REQUEST[’old_website_id’]))
return false;
if ($new_post =
get_post_from_old_id($_REQUEST[’old_website_id’]))
wp_redirect(get_permalink($new_post->ID));
return false;
}
Vinicius Massuchetto ¸˜
Grandes Migracoes
49. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
ˆ
URLs: Referencias a partir de regras
/* URL a ser migrada */
http://example.com/old_id/123
/* Escolher uma variavel para identificar este padrao */
add_action(’query_vars’, ’add_query_vars’);
function add_query_vars($vars) {
array_push($vars, ’old_id’);
return $vars;
}
Vinicius Massuchetto ¸˜
Grandes Migracoes
50. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
ˆ
URLs: Referencias a partir de regras
/* Adiciona a regra no set de regras */
add_action(’rewrite_rules_array’, ’rewrite_rules’);
function rewrite_rules($rules) {
$new_rules = array(
’old_id/(.+?)/?$’
);
return $rules + $new_rules;
}
Vinicius Massuchetto ¸˜
Grandes Migracoes
51. Tecnologia
¸˜
Introducao
Estrutura
Sistemas
´
Conteudo
¸˜
Migracoes
M´dias
ı
¸˜
Consideracoes Finais
URLs
ˆ
URLs: Referencias a partir de regras
/* Configura o flush de URLs */
add_action(’wp_loaded’, ’flush_rules’);
function flush_rules() {
if (!isset($rules[’old_id/(.+?)/?$’])) {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
}
Vinicius Massuchetto ¸˜
Grandes Migracoes
52. ¸˜
Introducao
Sistemas
¸˜
Migracoes
¸˜
Consideracoes Finais
¸˜
Consideracoes Finais
¸˜
Migracoes devem definitivamente ser inclu´das como
ı
componentes de projeto
O WordPress oferece um bom conjunto de ferramentas
para se trazer dadaos para dentro de sua estrutura.
´
E cab´vel o desenvolvimento de plugins espec´ficos para a
ı ı
¸˜
migracao de diferentes estruturas
Vinicius Massuchetto ¸˜
Grandes Migracoes