Pesquisar e substituir na base de dados do WordPress
O WordPress não guarda o endereço do seu site num único local. Este encontra-se nas definições, mas também literalmente nos seus artigos, nas imagens e nas definições de temas, plugins e widgets. Por isso, se alterar o endereço, terá de o substituir em toda a base de dados. Aqui explicamos como o fazer em segurança e por que razão um simples comando SQL pode danificar o seu site.
Quando precisa disto?
- O seu site funcionava em http e agora funciona em https, e surge conteúdo misto (uma página em https que carrega elementos através de http). Consulte também Sem cadeado ou 'não seguro': resolver conteúdo misto.
- Vai mudar o seu site para outro domínio, ou de um endereço temporário para o seu domínio definitivo.
- Criou manualmente uma cópia noutro endereço, por exemplo um site de testes.
Se clonar um site com o Installatron ou com o Website Manager, estes ajustam automaticamente os endereços na cópia. Consulte Clonar e criar um ambiente de testes (staging). Se apenas mudar para outro alojamento mantendo o mesmo domínio, não é necessário alterar nada.
Porque não utilizar um simples SQL REPLACE?
No phpMyAdmin é possível substituir todos os textos com um único comando SQL. Não o faça para endereços. Muitas definições são guardadas de forma serializada: o PHP regista o comprimento de cada texto. Tem este aspeto:
s:27:"http://example.com/logo.png";
s:27 significa: segue-se um texto com 27 caracteres. Se o alterar para https://, o texto passa a ter 28 caracteres, mas continua a indicar 27. O PHP deixa de conseguir ler o valor e a definição perde-se silenciosamente. Poderá então ver, por exemplo, um menu vazio, um logótipo desaparecido ou widgets que deixaram de existir. Por isso, utilize uma ferramenta que atualize esses comprimentos.
Primeiro, uma cópia de segurança
A pesquisa e substituição é imediata e não tem reciclagem. Exporte previamente a sua base de dados, consulte Exportar uma base de dados, ou crie com um clique uma cópia de segurança adicional no WebOké Backups, consulte WebOké Backups: ver, restaurar ou transferir uma cópia de segurança.
Método 1: WP-CLI no Terminal ou através de SSH
O WP-CLI é o programa oficial de linha de comandos do WordPress. Connosco, utiliza-o através do comando wp no Terminal do DirectAdmin ou através de SSH. Este só está disponível nos pacotes com SSH. Pode consultar quais são esses pacotes em Terminal no seu browser.
- Abra o Terminal e aceda à pasta do seu WordPress:
cd domains/example.com/public_html - Veja primeiro o que seria alterado, sem modificar nada:
wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guid --dry-run
Verá, por tabela, quantas substituições seriam efetuadas. - Se estiver correto, execute o mesmo comando sem
--dry-run.
Algumas opções do comando:
- Sem opções adicionais, o WP-CLI atua sobre as tabelas que o WordPress conhece. Se um plugin utilizar tabelas próprias com o mesmo prefixo (por exemplo
wp_), acrescente--all-tables-with-prefix. A opção--all-tablesabrange todas as tabelas da base de dados, incluindo as de outro site que eventualmente lá se encontre. --skip-columns=guiddeixa intacta a colunaguid, que contém os identificadores fixos dos artigos. O WordPress recomenda nunca a alterar, caso contrário os leitores de feeds voltam a mostrar artigos antigos como novos.- Se algo correr mal com definições complexas, a opção
--preciseé mais lenta, mas mais rigorosa.
Método 2: um plugin
Se não tiver acesso ao Terminal ou a SSH, utilize um plugin de pesquisa e substituição que suporte dados serializados. Existem vários no diretório de plugins do wordpress.org. Ao escolher, leia a descrição: deve indicar que processa corretamente dados serializados. Também aqui, utilize primeiro o modo de teste, se o plugin o tiver, e remova o plugin quando terminar. Consulte também Escolher, avaliar e limpar plugins do WordPress.
http:// ou https:// no início. Se substituir apenas example.com, alterará também endereços de e-mail como info@example.com e outros textos que contenham o nome. Tenha também atenção à barra no final: se substituir https://example.com/ por https://example.net, os endereços ficarão colados uns aos outros.Apenas o endereço do WordPress e o endereço do site?
Após uma alteração, deixou de conseguir aceder à administração porque o WordPress o redireciona para um endereço errado? Nesse caso, altere primeiro apenas as linhas siteurl e home na tabela wp_options (o prefixo wp_ pode ser diferente no seu caso). Trata-se de textos simples, que pode alterar no phpMyAdmin. Saiba como em Abrir e utilizar o phpMyAdmin. Depois, trate do resto com o WP-CLI ou com um plugin.
No final
- Limpe a cache do seu plugin de cache e do seu browser.
- Se as páginas devolverem um erro 404, clique uma vez em guardar em Definições > Ligações permanentes. Consulte O meu site não funciona depois do carregamento ou da migração.
- Verifique algumas páginas, o seu menu, o seu logótipo e um formulário. Prima F12 e veja na consola se ainda existem avisos de conteúdo misto.
Leitura adicional
- wp search-replace em developer.wordpress.org (em inglês)
- Migrar o WordPress manualmente: ficheiros, base de dados e wp-config.php
Quer aprender mais? Siga o curso gratuito de WordPress, lição 3.2 www, redirecionamento e conteúdo misto ou lição 9.5 Migrar um site WordPress.
