O que Aprendi em 15 Consultas SQL pra Hackear o WordPress (sem precisar de plugins)!

Wordpress

Como vocĂȘ obviamente sabe, eu tenho um blog 🙂

Na busca por otimizar o blog, no final do ano passado, finalmente consegui migrar da plataforma da Google (Blogger) pro WordPress, algo que levei anos pra realizar e que hoje lamento não ter feito antes. Simplesmente não hå comparação em termos de funcionalidade, facilidades, recursos, enfim.

Não é à toa que a plataforma domina nada menos que um terço da Internet!

Uma das coisas mais legais, senĂŁo a mais legal, do WordPress, sĂŁo os plugins.

Eles permitem fazer coisas incríveis com seu site, de templates para textos a melhorias de segurança pro site, de otimização de imagens a compactação de påginas para acelerar o desempenho, de exibição automåtica de propagandas a sugestÔes de textos relacionados, tudo isso e muito mais é possível fazer com esses pedacinhos mågicos de código.

Isso Ă© uma mĂŁo na roda muito, mas muito Ăștil mesmo, especialmente para empreendedores que nĂŁo dispĂ”em de recursos financeiros para delegar a profissionais especializados a manutenção do site ou blog.

E Ă© este o ponto que quero explorar neste texto.

Mas, antes, deixe eu apresentar a vocĂȘs os 27 “hacks” pro WordPress que descobri meio sem querer, enquanto pesquisava plugins pra tratar questĂ”es especĂ­ficas deste blog.

WordPress e LAMP

A combinação do WordPress com a famosa sigla LAMP (Linux, Apache, MySQL e PHP) é uma opção muito interessante e facilmente encontrada em qualquer provedor de serviços de hospedagem de sites que se preze.

Por isso mesmo, vale a pena conhecer um pouco melhor algumas das informaçÔes disponĂ­veis no banco de dados do WordPress, pois elas podem ser muito Ășteis em algumas situaçÔes.

Pra citar somente dois exemplos: 1) vocĂȘ pode nĂŁo querer instalar muitos plugins no seu site por razĂ”es de desempenho e segurança, e neste caso algumas operaçÔes que um plugin facilitaria podem ser realizadas diretamente no banco, como vou exemplificar mais adiante; 2) vocĂȘ pode nĂŁo encontrar um plugin que faça exatamente o que precisa, e neste caso a solução pode estar na execução de um script SQL diretamente no banco de dados do WordPress. Embora seja uma operação de risco, com os devidos cuidados (e, principalmente, um backup recente Ă  mĂŁo 🙂 Ă© possĂ­vel resolver mesmo as situaçÔes mais complicadas.

Explorando o banco de dados MySQL do WordPress

VocĂȘ pode começar sua aventura pelo banco de dados do WordPress com uma simples consulta.

connect wordpress;

SELECT * from wp_options limit 10;

Observe que incluí a opção “limit 10”. Isto porque, neste blog, a consulta sem esta cláusula resultou em uma listinha de ~5500 registros.

Para o objetivo didĂĄtico deste texto, as primeiras 10 linhas jĂĄ sĂŁo suficientes para revelar informaçÔes importantes sobre o site como nome, URL, contato do administrador e descrição. Esta tabelinha pode ser muito Ăștil em situaçÔes de migração, por exemplo, em que pode ser necessĂĄrio mudar a URL do site.

Agora que vocĂȘ jĂĄ se familiarizou um pouco com o banco de dados do WordPress, vamos aos hacks propriamente ditos!

1 – Mudar a URL do site

Hoje em dia não faltam motivos para ter um site, e por isso mesmo hå pessoas que vivem de registrar domínios pra vender depois. Em outros casos, nomes ofensivos ou relacionados a marcas podem ser obrigados a mudar por decisÔes judiciais.

Por isso Ă© importante saber o que fazer caso seja necessĂĄrio mudar a URL do seu site. Vai que


UPDATE wp_options SET option_value = replace(option_value, ‘http://www.enderecoantigo.com’, ‘http://www.endereconovo.com’) WHERE option_name = ‘home’ OR option_name = ‘siteurl’;

2. Atualizar o GUID (Globally Unique Identifier)

Além de atualizar as opçÔes relativas à URL propriamente dita, pode ser necessårio atualizar o GUID também.

UPDATE wp_posts SET guid = REPLACE (guid, ‘http://www.enderecoantigo.com’, ‘http://www.endereconovo.com’);

3. Atualizar URL nos conteĂșdos

Ainda tratando de mudança de URL, vocĂȘ pode alterar as referĂȘncias ao endereço anterior em todo o conteĂșdo do site.

UPDATE wp_posts SET post_content = REPLACE (post_content, ‘http://www.enderecoantigo.com’, ‘http://www.endereconovo.com’);

4. Alterar o caminho das imagens

A utilização de Content Delivery Networks (CDN) é cada vez mais comum para distribuir melhor as informaçÔes de forma que estejam mais próximas dos usuårios, melhorando o desempeno no acesso ao site.

Assim, o script abaixo permite ajustar o caminho das imagens para que apontem para o endereço do CDN ao invés do endereço do site.

UPDATE wp_posts SET post_content = REPLACE (post_content, ‘src=”http://www.enderecoantigo.com’, ‘src=”http://cdn.endereconovo.com’);
UPDATE wp_posts SET guid = REPLACE (guid, ‘http://www.enderecoantigo.com’, ‘http://cdn.enderecoantigo.com’) WHERE post_type = ‘attachment’;

5. Adicionar um campo aos posts

É possĂ­vel acrescentar campos aos posts do WordPress para qualquer uso que deseje, como colocar uma observação sobre o conteĂșdo, por exemplo.

INSERT INTO wp_postmeta (post_id, meta_key, meta_value)
SELECT ID AS post_id, ‘UniversalCustomField’
AS meta_key ‘MeuCampoPersonalizado’ AS meta_value
FROM wp_posts WHERE ID NOT IN
(SELECT post_id FROM wp_postmeta WHERE meta_key = ‘UniversalCustomField’)
” AND post_type = ‘post’;

Para fazer o mesmo com as páginas, basta alterar o filtro “post_type = ‘post'” para “post_type = ‘page'”.

6. Encontrar todos os posts com um certo campo

Depois de criar o novo campo, vocĂȘ pode localizar todos os posts que o contĂ©m.

SELECT wp_posts.ID, wp_postmeta.meta_key

FROM wp_posts

JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id

AND wp_postmeta.meta_key = ‘FIELD_NAME’

WHERE wp_posts.post_type = ‘post’

order by wp_posts.ID asc

7. Apatar post meta

Plugins podem deixar lixo no seu site. Este script ajuda a limpar a bagunça. Basta identificar o campo “meta” que o plugin criou e removĂȘ-lo.

DELETE FROM wp_postmeta WHERE meta_key = ‘LixoMetadoPlugin’;

8. Alterar o usuĂĄrio padrĂŁo admin

Embora este tipo de medida não seja tão eficaz como muitos pensam, pois aplica a segurança por obscuridade, renomear o usuårio admin pode ser uma medida interessante pra, ao menos, reduzir os ataques dos chamados script kiddies.

UPDATE wp_users SET user_login = ‘Awesome Boss’ WHERE user_login = ‘Admin’;

9. Identificar tags nĂŁo usadas

Se vocĂȘ resolve apagar posts antigos ou mudar as tags associadas, pode ser que fiquem algumas tags “órfĂŁs” no banco de dados do WordPress.

Para identificĂĄ-las use a consulta abaixo.

SELECT * From wp_terms wt
INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy=’post_tag’ AND wtt.count=0;

10. Apagando SPAM

Este foi um dos comandos mais Ășteis pra mim atĂ© agora, pois o blog estĂĄ sofrendo um “mini-ataque de SPAM” nos comentĂĄrios, e apagar todos os comentĂĄrios na unha Ă© completamente inviĂĄvel.

DELETE FROM wp_comments WHERE wp_comments.comment_approved = ‘spam’;

Na verdade a operação acima apaga os comentårios marcados como SPAM. Para verificar os comentårios que são SPAM mas ainda não foram marcados como SPAM, é necessårio verificar os comentårios pendentes, através dessa consulta:

SELECT * FROM wp_comments WHERE comment_approved <> 1;

11. Resetar senha

Essa Ă© clĂĄssica, hein? #quemnunca

Quando precisar redefinir a senha de algum usuĂĄrio, o comando SQL abaixo vai ser muito, muito

UPDATE wp_users SET user_pass = MD5( ‘nova_senha’ ) WHERE user_login = ‘logindousuario’;

12. Reatribuir artigos

Caso o site tenha vĂĄrios colaboradores e um deles saia, Ă© possĂ­vel transferir para outro autor os textos. Pelo menos em termos de banco de dados 🙂

UPDATE wp_posts SET post_author = ‘id-novo-autor’ WHERE post_author = ‘id-autor-antigo’;

13. Apagar revisÔes

Eu costumo editar os posts vårias vezes até chegar a uma versão final e publicar.

Nestes casos, as revisÔes podem ocupar um espaço precioso.

Não mais 🙂

DELETE a,b,c FROM wp_posts a

LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)

LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)

WHERE a.post_type = ‘revision’

 

14. Apagar comentĂĄrios nĂŁo aprovados

Jå mostrei como listar os comentårios pendentes, não aprovados. Com a operação abaixo, é possível apagå-los.

DELETE FROM wp_comments WHERE comment_approved = 0

15. Desativar comentĂĄrios em posts antigos

Aqui outra dica muito valiosa. Pra reduzir o SPAM nos comentĂĄrios, tive que bloquear este recurso para alguns dos posts mais vizualizados do blog.

UPDATE wp_posts SET comment_status = ‘closed’ WHERE post_date < ‘2016-03-11’ AND post_status = ‘publish’;

 

ConclusĂŁo

O que quero chamar a atenção sobre esse texto Ă© algo que muitas vezes vejo profissionais de TI, atĂ© experientes, procurando “as mesmas facilidades” que um usuĂĄrio final.

Muitas vezes isso simplesmente nĂŁo faz sentido.

Fazendo uma analogia com estes “hacks” do WordPress, Ă© muito mais produtivo para um profissional de TI usar o conhecimento a mais que possui para criar um plugin que nĂŁo exista, ou automatizar tarefas atravĂ©s de SQL e outros recursos disponĂ­veis, do que se limitar apenas aos plugins disponĂ­veis e o que seus desenvolvedores estĂŁo dispostos a oferecer.

Me vi obrigado a adotar uma postura mais “script friendly” e atĂ© voltei a programar depois que passei a estudar CiĂȘncia de Dados e DevOps, e os primeiros resultados jĂĄ sĂŁo bem interessantes. Num outro texto pretendo falar sobre eles.

Published by

Christian Guerreiro

Professor, blogueiro, amante da tecnologia e viciado em informação. Fundador de https://blog.tecnologiaqueinteressa.com, http://omelhordocinema.com e http://escolabitcoins.com.br.