Que Consulta SQL para fazer uma localização e substituição simples

19

Sempre que crio um novo site, primeiro crio um site intermediário em um subdomínio como "stage.domain-name.com".

Depois que tudo funcionar corretamente, exporto o banco de dados, abra-o no bloco de notas ++ e localize / substitua "subdomínio.domínio-nome.com" e substitua-o por "domínio-nome.com" ... finalmente, importo-o para um novo banco de dados para o site ativo.

Minha pergunta é ... qual consulta SQL eu precisaria executar se eu quisesse fazer essa busca / substituição simples em todo o banco de dados usando phpmyadmin?

-CH

NetConstructor.com
fonte
Se você não estiver familiarizado com consultas tentar o Search and Replace plugin, wordpress.org/extend/plugins/search-and-replace
t31os
Por que não usar a funcionalidade do WordPress para atualizar o URL? codex.wordpress.org/Moving_WordPress detalha tudo
Alex Older
Existe um plugin para isso. Ele permite o uso confortável do backend e também substitui o URL no pós-conteúdo e alguns outros campos, se você quiser: wordpress.org/plugins/better-search-replace
simonthesorcerer

Respostas:

13

A tabela em que seu URL é salvo é wp_options. Você deve fazer uma atualização nas colunas que usam o URL do seu site:

UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "siteurl"
UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "home"

Talvez esteja faltando algum valor, mas sempre que você fizer esse processo de localização / substituição novamente, poderá observar os valores e tabelas que devem ser atualizados e adicioná-los a esse script.

O WordPress Codex tem um bom guia sobre como alterar o URL de um site, talvez seja ainda mais prático para você: Alterar o URL do site

Fernando Briano
fonte
1
não há uma maneira de encontrar / substituir em todo o banco de dados? Em outras palavras ... Percebi, por exemplo, que preciso substituir os URLs em vários locais diferentes, incluindo a biblioteca de mídia ... Se houvesse uma localização / substituição para todo o banco de dados, essencialmente para todos os campos, isso resolveria o problema. Obrigado pela sua ajuda
NetConstructor.com
Confira o novo link que eu adicionei na resposta. Eu acho que esse seria o caminho a seguir.
Fernando Briano
1
Isso não funcionará para dados serializados. Pode quebrar completamente alguma configuração de tema.
Christian Lescuyer
28

Melhor para fazer opções, postagens, conteúdo e meta meta:

UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');

UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');

UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

Consulte também Pesquisando dados usando phpMyAdmin e MySQL | Publicação Packt. E o Search RegEx é um bom plugin WP para poder pesquisar e substituir o Grep em todas as postagens e páginas.

Atualização 16/6/2015: Usar a ferramenta vinculada na próxima frase é muito melhor, pois uma simples localização / substituição como acima em um despejo de banco de dados interromperá os dados serializados. Consulte interconnectit.com Ferramenta de substituição de pesquisa PHP serializada do WordPress. Dessa forma, você não quebra os dados serializados e não precisa executar o RegEx no conteúdo da postagem, pois o script de interconexão altera os URLs em todos os lugares. Eu uso essa ferramenta o tempo todo para migrar sites para domínios diferentes ou simplesmente fazer uma alteração global de http para https para forçar o SSL sem plug-ins e alterar todas as URLs no conteúdo para evitar erros de elementos inseguros.

markratledge
fonte
2
Nunca mude o guia - mesmo se estiver indo para um novo domínio. É usado para identificar exclusivamente a postagem, pois ela pode ser alterada se as postagens estiverem sendo exportadas / importadas para um novo banco de dados. Por um lado, os leitores de RSS usarão o GUID para saber se um artigo específico foi lido ou não. Alterar o guia efetivamente republicará todos os seus artigos.
Taylor Dewey
@taylordewey disse: "Nunca mude o guia ..." Lixo.
markratledge
1
@songdogtech Cuidado para explicar por que é lixo?
shea
1
Por que alguém precisaria alterar o GUID?
Kaiser #
1
Isso não funcionará para dados serializados. Pode quebrar completamente alguma configuração de tema. Na verdade, use uma ferramenta como a Interconnect / IT's.
Christian Lescuyer
9

Esse é um ótimo script drop-in que eu uso e funciona lindamente com as matrizes serializadas que o WP usa para armazenar opções. Apenas certifique-se de excluí-lo do servidor remoto quando terminar, pois é um enorme risco de segurança.

https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

lancemonotone
fonte
2
Não sei por que fui marcado com +1. Este script é muito melhor que uma instrução SQL. Feedback por favor?
Lancemonotone 3/08
1
uma ferramenta que as pessoas que não sabem sql pode usar, está perturbando a quem escrever em SQL
Jon
4

Para isso, uso o WP-CLI porque acho o mais fácil e cuida dos dados serializados.

wp search-replace 'http://example.dev' 'http://example.com' --skip-columns=guid

Há também uma opção que grava suas alterações em um arquivo SQL em vez de manipular o banco de dados real:

wp search-replace foo bar --export=database.sql

Jan Beck
fonte
de longe a solução mais robusta e rápida. wp-cli salva o dia, mais uma vez
ryanrain
3

você não precisa fazer isso, pode usar caminhos relativos.

quando você estiver vinculando algo em vez de subdomínio.soemthing.com/image.jpg - use /image.jpg por exemplo

assim você não enfrentará o problema em primeiro lugar.

caso contrário, para uma instrução de atualização do mysql, você pode usar

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, find this string’, replace found string with this string’);
Mireille Raad
fonte
Obrigado ... sim, farei isso na próxima vez. A instrução SQL encontra uma substituição em todo o banco de dados (incluindo todas as tabelas)?
NetConstructor.com
@ NetConstructor.com A instrução SQL que mireille forneceu acima é o comando MySQL genérico para substituir uma string em um campo específico em uma tabela específica. Se você tentasse executar esta declaração exatamente como foi escrita, ela não funcionaria. Para que este comando funcione, você precisará alterar TABLE_NAME e FIELD_NAME para um campo e uma tabela reais usados ​​pelo WordPress.
Manzabar 26/01
Observe também que, mesmo se você deseja usar caminhos relativos, muitas partes do wordpress tendem a inserir automaticamente caminhos completos. Para realmente começar este trabalho um plugin como: wordpress.org/plugins/root-relative-urls é muito, muito útil
benz001
2

Para alterar o domínio wordpress, o que geralmente precisamos é tornar o site ativo a partir do host local: Esta é uma lista completa das consultas de atualização:

UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_url = replace(link_url, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_image = replace(link_image, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_usermeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

/*UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl' OR option_name = 'widget_text' OR option_name = 'dashboard_widget_options';*/
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com');
  • Também temos que adicionar outras tabelas que não são padrão com o WP, se necessário.

ATUALIZAÇÃO: O Search Replace DB versão 3.1.0 é uma ferramenta de interface amigável para desenvolvedores, que permite executar ações de pesquisa / substituição em todo o banco de dados, que não danificam objetos ou seqüências serializadas do PHP.

Reza Mamun
fonte
2
Isso não funcionará para dados serializados. Pode quebrar completamente a configuração do tema.
Christian Lescuyer
-1

Na verdade, você não precisa usar uma consulta SQL apenas alguns ajustes no arquivo wp_config e functions.php no seu tema. Confira este tópico no Wordpress Codex: https://codex.wordpress.org/Changing_The_Site_URL

MEDZ
fonte
1
Isto não está correto. Infelizmente, o WordPress armazena algum URL no banco de dados como texto.
s_ha_dum