Aprenda a migrar seu site em WordPressChegou aquele momento de migrar o site em WordPress que você fazia no ambiente local para o ambiente de produção? Te pediram para mudar o endereço daquele outro site de a.com.br para b.com?

Pra que se preocupar? Isso é mole. Afinal você que manja dos “paranauê” de MySQL vai achar isso fácil. Basta dar um “replace” do endereço antigo para o endereço novo! Ou então você pode pensar que nem precisa chegar a tanto. Basta dar um dump na base, abrir o sql num bloco de notas e dar um “find and replace” e pronto né?

Hummm só que não.

Isso até poderia funcionar sem problemas se o wordpress não trabalhasse com os alguns dados de forma serializada. Isso quer dizer que alguns tipos de dados mais complexos como objetos ou arrays são salvos diretamente na base na forma de string.

Por ex: Imagine uma situação em que você tenha um array em que uma das posições é exatamente a url do site, assim:

array('http://a.com.br','Seu site');

O wordpress salvaria esse array no formato de uma string, assim:

a:2:{i:0;s:15:"http://a.com.br";i:1;s:8:"Seu site";}

Repare que cada número tem um sentido. O a mostra a qtd de posições no array (no caso 2). O i é a posição do elemento no array. Primeiro 0 e depois vem o 1. Já o s mostra a contagem de caracteres de cada string dentro do array. Então se um simples “replace” fosse executado nessa string serializada para http://meusite.com.br por exemplo , o php não poderia  desserializar de volta, já que o primeiro s continuaria mostrando 15, quando deveria mostrar 21, o que faria com que esse array inteiro fosse perdido.

É muito comum perder informações relacionadas a widgets, quando o replace é realizado dessa forma.

A solução

Há muitas soluções por aí em forma de plugin que gerenciam o replace considerando a serialização de dados, como o Wp Migrate DB ou Duplicator.
Porém a que eu sempre uso, considero simples e que nunca me deixou na mão é a ferramenta Database Search and Replace da Interconnect, além do que o próprio codex do wordpress recomenda.

Você só precisa baixar o script,  informar os dados da conexão do banco e clicar em update details

Se estiver tudo certo, é só dar o replace sem preocupações. O interessante é que o script tem uma opção (Dry Run) que serve apenas para testar o replace (Como se fosse um commit com um Roll Back).  E se você estiver certo aí sim é só clicar em live Run.

Eu geralmente só dou o replace na url do site e no endereço do wp-content, quando ele muda. Para alterar a url do site Por exemplo:

  • localhost/meusite para www.meusite.com.br
    ou
  • sitetal.com.br para outrosite.com.br

E para mudar o wp-content (quando necessário):

  • wp-content para wp/wp-content

 

Script search and Replace da Interconnect