Turbine seu fluxo de trabalho com WP-CLI

Turbine seu fluxo de trabalho com WP-CLI
Photo by David Torres on Unsplash

Glossário 📃

Leia abaixo significados que vão te ajudar a compreender melhor o artigo.

TermoSignificadoExemplo
GUIGraphical user interface (Interface gráfica do utilizador)phpMyAdmin
CLICommand line interface (Interface de linha de comando)mysql

Pra que serve e o que é WP-CLI? 🤷‍♀️

WP-CLI é a interface de linha de comando, para WordPress, usada para realizar tarefas administrativas e de desenvolvimento de forma programática.

Em outras palavras, WP-CLI é uma ferramenta que te permite executar comandos em seu terminal. Você pode encontrar uma lista completa de comandos na documentação oficial do WP-CLI. Também é possível criar seus próprios comandos WP-CLI. Leia como extender o WP-CLI no guia Commands Cookbook.

E na prática isso significa que você pode através do terminal (CLI) fazer um monte de coisas sem acessar o painel (GUI) do WordPress. Exemplos do que você pode fazer:

  1. Alterar a senha de um usuário sem acessar a administração.
  2. Exportar e importar o banco de dados.
  3. Fazer alteração de textos no banco de dados sem acessa-lo diretamente via GUI (phpMyAdmin).
  4. Remover transientes expirados e não expirados.
  5. Criar vários posts de qualquer tipo.
  6. Instalar, remover, ativar e desativar plugins.
  7. Adicionar e remover usuários.
  8. Regenerar todas as suas imagens sem precisar usar o famoso plugin Regenerate Thumbnails.

O WP-CLI também inclui comandos para muitas coisas que você não pode fazer pela adminsitração do WordPress. Por exemplo: wp transient delete --all (doc) permite excluir um ou todos os transientes do banco de dados.

Pré-requisitos do WP-CLI 🚧

Antes de instalar a biblioteca WP-CLI certifique-se de que seu ambiente atende aos requisitos mínimos:

  • Sistema operacional Unix-like (OS X, Linux, FreeBSD, Cygwin). E a documentação oficial do WP-CLI diz que o suporte a sistemas operacionais Windows é limitado. MAS, se você é um usuário Windows e não pensa em mudar para Linux e nem em comprar um Mac, basta você utilizar no Windows o poderoso WSL (Windows Subsystem for Linux). 😎
  • PHP 5.6 ou superior.
  • WordPress 3.7 ou superior. O WP-CLI se comportará de forma imprevisível em versões mais antigas do WordPress.

A linha de comando cria uma espécie de atmosfera na qual você como programador se sente bem e ainda faz você economizar muito trabalho.

Como instalar o WP-CLI? 👩‍💻

Versão curta (para veteranos):
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar \
&& php wp-cli.phar --info \
&& chmod +x wp-cli.phar \
&& sudo mv wp-cli.phar /usr/local/bin/wp \
&& wp --info
Versão detalhada:

Se você já trabalhou com NPM ou Composer, a instalação do WP-CLI será muito fácil e familiar.

Você só precisa fazer download do arquivo wp-cli.phar. Abra seu terminal e execute a seguinte linha de comando:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

Depois certifique-se de que o arquivo Phar está funcionando executando:

php wp-cli.phar --info

A instalação ainda não terminou…

Para digitar apenas a palavra-chave wp ao invés de php wp-cli.phar você precisa mover o arquivo Phar. Então, ainda no terminal e dentro da mesma pasta onde está o arquivo Phar execute o seguinte comando:

chmod +x wp-cli.phar \
&& mv wp-cli.phar /usr/local/bin/wp

É isso! Agora cheque se a instalação foi bem sucedida:

wp --info

Se o WP-CLI foi instalado com sucesso você deverá ver algo assim depois de executar wp --info:

OS:     Linux 5.10.60.1-microsoft-standard-WSL2 #1 SMP Wed Aug 25 23:20:18 UTC 2021 x86_64
Shell:  /usr/bin/zsh
PHP binary:     /usr/bin/php8.1
PHP version:    8.1.0
php.ini used:   /etc/php/8.1/cli/php.ini
MySQL binary:   /usr/bin/mysql
MySQL version:  mysql  Ver 8.0.27-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
SQL modes:
WP-CLI root dir:        /home/wp-cli/
WP-CLI vendor dir:      /home/wp-cli/vendor
WP_CLI phar path:
WP-CLI packages dir:    /home/wp-cli/.wp-cli/packages/
WP-CLI global config:
WP-CLI project config:  /home/wp-cli/wp-cli.yml
WP-CLI version: 2.6.0

Casos de uso do WP-CLI 🚀

A ferramenta WP-CLI possui mais de 40 comandos e mais de 150 subcomandos. Abaixo você encontrará alguns casos de uso nos quais o WP-CLI pode te economizar bastante tempo. Você deve perceber que realizar uma tarefa utilizando WP-CLI é simplesmente mais rápido do que indo pelo caminho tradicional. Tudo o que está listado abaixo pode ser feito de outra maneira. O WP-CLI é só uma alternativa de caminho que te levará ao seu destino de forma mais rápida. 🏃‍♀️💨

1. wp db export & wp db import

O comando wp db export exporta o banco de dados usado pela instalação WordPress para um arquivo. E o comando wp db import importa um banco de dados de um arquivo. Ambos os comandos dependem das credenciais corretas de acesso ao banco que são definidas no arquivo wp-config.php (DB_HOST, DB_NAME, DB_USER and DB_PASSWORD).

Exemplo de como exportar e importar um banco de dados WordPress sem usar WP-CLI:
  1. Acesse algum gerenciador de banco de dados como, por exemplo, o phpMyAdmin.
  2. Faça login utilizando as credenciais corretas e necessárias.
  3. Clique no banco de dados que você quer exportar.
  4. Através do recurso de exportação do phpMyAdmin exporte o banco de dados para um arquivo.
  5. Torça para que você não ganhe de presente uma mensagem de erro que tem a ver com timeout.
  6. Agora, acesse o gerenciador de banco de dados da outra instalação WordPress que deve usar o arquivo que você acabou de exportar.
  7. Faça login utilizando as credenciais corretas e necessárias.
  8. Clique no banco de dados que você que deve receber as novas tabelas.
  9. Através do recurso de importação do phpMyAdmin faça upload do arquivo recentemente exportado e importe-o.
  10. Torça novamente para que você não ganhe de presente uma mensagem de erro que tem a ver com timeout.
Como exportar e importar um banco de dados WordPress com WP-CLI:
  1. Acesse via terminal/SSH a pasta que contém os arquivos da sua instalação WordPress.
  2. Execute o comando wp db export database.sql (o banco de dados será exportado e salvo em um arquivo chamado database.sql).
  3. Acesse via terminal/SSH a pasta que contém os arquivos da outra instalação WordPress.
  4. Coloque o arquivo recentemente exportado aqui nessa pasta.
  5. Execute o comando wp db import database.sql. 👌
Cenário no qual wp db export e wp db import são úteis:

Suponha que sua equipe acaba de colocar um site no ar. E de vez em quando, para continuar o desenvolvimento na sua própria máquina, você precisa exportar o banco de dados que está no ambiente de produção e importa-lo na sua máquina. Como fazer isso?

Acesse o servidor utilizando SSH, entre na pasta onde está a instalação WordPress e execute:

wp db export database.sql --add-drop-table

O que o código acima faz?

  • Exporta o banco de dados para um arquivo chamado database.sql.
  • A opção --add-drop-table garante que durante a importação do banco as tabelas existentes sejam deletadas antes.

Agora, como importar o arquivo no banco de dados local?

Pela linha de comando entre na pasta onde está sua instalação WordPress local, coloque o arquivo recentemente exportado nela e execute:

wp db import database.sql --skip-plugins --skip-themes

O que o código acima faz?

  • Importa o arquivo database.sql no banco de dados local.
  • A opção --skip-plugins pula o carregamento de todos os plugins.
  • A opção --skip-themes pula o carregamento de todos os temas.

2. wp user update

O comando wp user update atualiza um usuário existente.

Exemplo de como atualizar um usuário existente no WordPress sem usar WP-CLI:
  1. Acesse como administrador o painel do WordPress.
  2. Acesse no menu: “Usuários” > “Todos os usuários”.
  3. Clique no usuário que você quer editar.
  4. Edite a informação que deve ser atualizada.
  5. Role até o final da página e clique no botão para atualizar o usuário.
Como atualizar um usuário existente no WordPress com WP-CLI:
  1. Acesse via terminal/SSH a pasta que contém os arquivos da sua instalação WordPress.
  2. Para editar a senha, por exemplo, execute o comando wp user update 1 --user_pass=123. 👌
Turbine seu fluxo de trabalho com WP-CLI
Resultado do comando

O número “1” representa o ID do usuário. E no lugar do ID você também pode usar o nome de usuário (user_login).

Cenário no qual wp user update é útil:

No cenário anterior a esse você aprendeu a exportar e importar o banco de dados. Então, imagine que após importar o arquivo no seu banco de dados local você quer alterar a senha do seu usuário para poder fazer login no painel mais rapidamente.

wp user update SEU_NOME_DE_USUARIO --user_pass=123

3. wp media regenerate

O comando wp media regenerate gera novamente os tamanhos de um arquivo de imagem. Confuso? Então, imagine o seguinte cenário:

  • Em sua biblioteca existe uma imagem que se chama attachment.jpg
  • Essa imagem possui as seguintes dimensões: 1920×1080 pixels.
  • As suas configurações de mídia estão definidas como na imagem abaixo:
Turbine seu fluxo de trabalho com WP-CLI
  • Isso significa que ao lado do arquivo attachment.jpg existem mais 3 arquivos (1 para cada tamanho de imagem definido em suas configurações – “Configurações” > “Mídia”). Veja a ilustração:
Turbine seu fluxo de trabalho com WP-CLI

Agora, vamos fazer a seguinte alteração no nosso cenário:

  • Você altera a opção “Tamanho da miniatura” para 25. Assim:
Turbine seu fluxo de trabalho com WP-CLI

Vamos dar continuidade nos exemplos abaixo.

Exemplo de como gerar novos tamanhos para o arquivo de imagem sem usar WP-CLI:
  1. Acesse como administrador o painel do WordPress.
  2. Acesse no menu: “Plugins” > “Adicionar novo”.
  3. Instale e ative o plugin Regenerate Thumbnails.
  4. Acesse no menu: “Ferramentas” > “Regenerate Thumbnails”.
  5. Defina as melhores opções para o seu caso e inicie a regeneração.
Como gerar novos tamanhos para o arquivo de imagem com WP-CLI:
  1. Acesse via terminal/SSH a pasta que contém os arquivos da sua instalação WordPress.
  2. Execute o comando wp media regenerate --yes. 👌
Turbine seu fluxo de trabalho com WP-CLI
Resultado do comando

No nosso exemplo após executar o comando o arquivo test-100×100.jpg foi deletado e o novo arquivo/tamanho test-25×25.jpg foi gerado:

Turbine seu fluxo de trabalho com WP-CLI
Cenário no qual wp media regenerate é útil:

Além do cenário mostrado acima, um outro contexto no qual você pode precisar regenerar seus tamanhos de imagem é quando você descobre que seu tema e/ou plugins ativos estão registrando inúmeros tamanhos “inúteis” que só servem para ocupar espaço no HD. Já vi casos em que uma instalação WordPress possuía mais de 30 tamanhos registrados, mas apenas os tamanhos nativos do WordPress eram de fato utilizados.

E mais, se você pretende usar um plugin pago para comprimir suas imagens, então, dependendo do plugin, quanto menos tamanhos registrados melhor, porque você gasta menos. 💲

4. wp post generate

O comando wp post generate cria um número especificado de posts (qualquer tipo) com dados fictícios.

Exemplo de como criar vários posts de uma só vez sem usar WP-CLI:
  1. Acesse como administrador o painel do WordPress.
  2. Acesse no menu: “Posts” > “Adicionar novo”.
  3. Insira no post as informações convenientes (título, conteúdo, etc.).
  4. Salve/publique o post.
  5. Se você quiser publicar ao todo 24 posts, então, repita o processo mais 23 vezes.

Outra alternativa é instalar algum plugin que permite a duplicação de posts e/ou a criação de posts em massa.

Como criar vários posts de uma só vez com WP-CLI:
  1. Acesse via terminal/SSH a pasta que contém os arquivos da sua instalação WordPress.
  2. Execute o comando:
curl -o .post_content.txt https://loripsum.net/api/6/medium/decorate/link/ul/ol/bq/headers; \
cat .post_content.txt | \
wp post generate --count=24 --post_title="Lorem Ipsum - Generator, Origins and Meaning" --post_type=post --post_status=publish --post_author=1 --post_content
Turbine seu fluxo de trabalho com WP-CLI
Resultado do comando

O que o código acima faz?

  • Faz download do conteúdo de https://loripsum.net/api/6/medium/decorate/link/ul/ol/bq/headers e coloca-o num arquivo chamado .post_content.txt.
  • Em seguida de fato o comando wp post generate é executado.
  • --count=24 define que 24 posts devem ser criados.
  • --post_type=post define o tipo do post. Qualquer tipo pode ser escolhido.
  • --post_content é uma opção usada para dizer ao comando que ele deve usar como conteúdo do post o STDOUT disparado antes do |.
Cenário no qual wp post generate é útil:

Infelizmente, um comportamento muito comum entre freelancers e empresas que constroem sites é:

Eles entregam o site sem testar o conteúdo que aparece nas páginas e no blog. Como assim? Eles dão o site como pronto sem sequer saber se links, listas numeradas e não numeradas, blocos de citação, palavras em negrito, etc., estão devidamente estilizados para o usuário final.

Então, use e abuse do comando wp post generate para gerar uma quantidade relativamente alta de posts e testar como vários posts se comportam no site antes de coloca-lo no ar. O comando acima, por exemplo, gera vários posts contendo cabeçalhos, blocos de citação, listas, palavras em negritos, links, etc.

E por falar em testes, você já usou a ferramenta WP TEST? É fantástica, mas adivinha? Para usa-la de forma mais prática você precisa do WP-CLI. Basta executar o comando:

curl -OL https://raw.githubusercontent.com/poststatus/wptest/master/wptest.xml \
&& wp plugin install wordpress-importer --activate \
&& wp import wptest.xml --authors=create \
&& wp plugin deactivate wordpress-importer --uninstall \
&& rm -f wptest.xml

5. wp post delete & wp post list

O comando wp post delete exclui um post existente. E o comando wp post list gera uma lista de posts com base em todos os argumentos suportados por WP_Query.

Esses dois comandos estão listados em conjunto porque juntos eles são, pra mim, sem dúvida, uma das melhores práticas que o WP-CLI pode oferecer.

Exemplo de como deletar vários posts de uma só vez sem usar WP-CLI:
  1. Acesse como administrador o painel do WordPress.
  2. Acesse no menu: “Posts” > “Todos os posts”.
  3. Marque a caixa de seleção de todos os posts para serem deletados.
  4. Em “Ações em massa” selecione “Excluir” e clique em “Aplicar”.
  5. Torça para que você não ganhe de presente a mensagem de erro que tem a ver com Request-URI Too Large.
Como deletar vários posts de uma só vez com WP-CLI:
  1. Acesse via terminal/SSH a pasta que contém os arquivos da sua instalação WordPress.
  2. Execute o comando:
wp post delete $(wp post list --post_type=post --format=ids) --force
Turbine seu fluxo de trabalho com WP-CLI
Resultado do comando
Cenário no qual wp post delete e wp post list são úteis:

No meu trabalho eu frequentemente preciso exportar o banco de dados de produção e importa-lo na minha máquina. Em alguns projetos esse banco vem com uma quantidade absurda de posts com o status trash, draft e future (lixeira, rascunho e agendado). Então, para diminuir drasticamente a quantidade de posts e páginas que é listada no meu painel eu executo o seguinte comando:

wp post delete $(wp post list --posts_per_page=9999 --post_type=any --post_status=draft,trash,future --format=ids) --force

6. wp config shuffle-salts

O comando wp config shuffle-salts atualiza os salts (security keys) definidos no arquivo wp-config.php.

Exemplo de como alterar os salts do wp-config.php sem usar WP-CLI:
  1. Acesse via FTP ou terminal/SSH a pasta que contém os arquivos da sua instalação WordPress.
  2. Abra o arquivo wp-config.php para edita-lo e mantenha-o aberto.
  3. Acesse a URL https://api.wordpress.org/secret-key/1.1/salt/ para gerar novos salts.
  4. Copie os salts gerados e cole-os no arquivo wp-config.php.
  5. Lembre-se de excluir os salts antigos.
  6. Salve o arquivo.
Como alterar os salts do wp-config.php com WP-CLI:
  1. Acesse via terminal/SSH a pasta que contém os arquivos da sua instalação WordPress.
  2. Execute o comando: wp config shuffle-salts. 👌
Turbine seu fluxo de trabalho com WP-CLI
Resultado do comando
Cenário no qual wp config shuffle-salts é útil:
  1. Você começa e finaliza uma instalação WordPress localmente.
  2. Depois você coloca seu projeto no ar com os mesmos salts usados durante o desenvolvimento.
  3. Por segurança os salts devem ser diferentes em cada ambiente. Você deve trata-los como se fossem uma senha de banco de dados, por exemplo.
  4. Ou seja, sempre que colocar uma instalação WordPress no ar execute o comando wp config shuffle-salts.

7. wp shell

O comando wp shell abre um console interativo pronto para executar e testar código PHP. A vantagem e utilidade desse console é que nele você pode usar as funções carregadas pelo WordPress.

Dica: antes de usar wp shell execute o comando wp package install schlessera/wp-cli-psysh para modificar a aparência do console. VALE A PENA! E, na verdade, eu não teria continuado a usar wp shell se não fosse por esse pacote: schlessera/wp-cli-psysh.

Exemplo de como executar e testar funções PHP do WordPress sem usar WP-CLI:
  1. Acesse via FTP ou terminal/SSH a pasta que contém os arquivos da sua instalação WordPress.
  2. Acesse a pasta do tema que está ativo, procure e abra o arquivo functions.php.
  3. Em qualquer linha do arquivo digite o código que você quer testar.
  4. Continue editando o arquivo e adicione a linha exit; logo após seu código.
  5. Acesse o site usando um navegador.
Como executar e testar funções PHP do WordPress com WP-CLI:
  1. Acesse via terminal/SSH a pasta que contém os arquivos da sua instalação WordPress.
  2. Execute o comando wp shell.
  3. Escreva seu código e aperte Enter. 👌
Turbine seu fluxo de trabalho com WP-CLI
Resultados do comando
Cenário no qual wp shell é útil:

Você sabe que o WordPress tem uma série de funções de formatação localizadas no arquivo wp-includes/formatting.php? Explore esse arquivo e você pode acabar achando algo que pode te surpreender.

O console gerado pelo wp shell é um lugar no qual rapidamente você pode testar todas (ou quase todas) essas funções. Eu particularmente gosto muito de testar as funções sanitize_title() e sanitize_html_class().

Como se acostumar com o uso do WP-CLI?

  1. Deixe o terminal à disposição pra que você use o WP-CLI a qualquer momento. Isso faz com que você não negligencie a ferramenta e economize seu tempo sempre que possível.
  2. Se um comando é útil para você e você ainda não está familiarizado com ele, então, evite no começo ctrl c + ctrl v e digite o comando manualmente, letra por letra até você decorá-lo.
  3. Ensine e incentive outras pessoas a usarem. 👨‍🏫
  4. Considere salvar estes links nos seus Favoritos. Pelo menos enquanto você estiver treinando o uso do WP-CLI.

1 comentário

  1. Infelizmente tenho visto muitas dicas sobre wp-cli que não funcionar. Quando o link é direto, tipo wp db export database.sql funciona, mas quando tem alvo involucrado em parênteses não funciona. Exemplo

    wp comment delete $(wp comment list –status=spam –format=ids)
    Não consigo apagar os comentários com esse comando. Queria apagar tudo, mas pelo site, aqui onde está format=ids, eu preciso colocar todos os ids. Isso seria inviável.

    Colocando apenas wp comment delete $(wp comment list –status=spam –format=ids) não funciona

Deixe um comentário