Durante a maior parte de sua vida, o WordPress foi construído usando uma base de código simples com um traço de PHP orientado a objetos sendo o sistema mais abstrato. Nos últimos anos, porém, isto está a mudar para melhor. Do teste de unidade ao pré-processamento CSS e ferramentas de linha de comando, mais e mais recursos amigáveis ao desenvolvedor estão aparecendo. Neste artigo, vamos ver um dos meus favoritos: WP-CLI.

WP-CLI tem sido um projeto open source por mais de uma década, sendo mantido principalmente por Daniel Bachhuber desde 2003. O objetivo principal do WP-CLI é ajudar a acelerar os fluxos de trabalho dos desenvolvedores do WordPress.

Ao longo dos anos, o projeto surgiu em muito mais! Agora está se tornando uma exigência para outros projetos open source como o Trellis and Bedrock. A partir de janeiro de 2017, o WP-CLI mudou-se oficialmente para WordPress.org e agora também está sendo mantido em co-manutenção por Alain Schlesser.

WP-CLI v2 foi lançado em 8 de agosto de 2018, então também vamos explorar algumas das mudanças e novas funcionalidades. Se você é um cliente Kinsta, WP-CLI v2.0.1 é instalado por padrão em todos os nossos servidores, simplesmente SSH no seu servidor para começar. O acesso SSH está incluído em todos os nossos planos de hospedagem (Não consegue conectar via SSH? Corrija o erro “Connection Refused” do SSH).

Obtendo WP-CLI

O requisito mínimo de PHP no WP-CLI v2.0.0 foi aumentado para PHP 5.4. Embora este seja um bom passo em frente, recomendamos que você pelo menos execute uma versão suportada do PHP, ou seja, 5.6 ou superior. O PHP 7.2 é padrão em todas as instalações da Kinsta, tanto por razões de segurança quanto de performance. Nós também temos PHP 7.3 e 7.4 disponível.

Para começar, você precisa instalar o WP-CLI – um processo muito simples. Os passos para Linux e OSX são os seguintes, emita estes três comandos um após o outro:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

Se algo der errado ou você estiver no Windows, consulte as instruções básicas ou os métodos alternativos de instalação.

Uma vez terminado deverá ser capaz de emitir o comando wp --info e obter uma resposta significativa.

O processo é o mesmo se quiser instalar o WP-CLI no seu servidor. Lembre-se, para os clientes Kinsta o WP-CLI já está instalado. Não tem certeza de qual versão você está executando atualmente? Você pode sempre emitir o comando wp cli version para descobrir.

Os Princípios Básicos do WP-CLI

Ter acesso ao WordPress a partir da linha de comando é poderoso em si mesmo, mas pode lhe dar ainda mais controle e ganhos de velocidade ao usar scripts bash.

Os scripts Bash permitem-lhe correr uma sequência de comandos com um único comando. Você pode digitar bash install-and-setup.sh e obter o seguinte resultado:

  • Baixar WordPress
  • Criar e preencher wp-config.php
  • Criar a base de dados
  • Instalar o WordPress
  • Instale e ative os plugins que você precisar
  • Instalar e ativar um tema
  • Baixe e adicione conteúdo de teste

Estes seriam os passos que eu tomaria para criar um novo ambiente de teste para um projeto. Normalmente demoraria pelo menos 5-10 minutos, especialmente se houver alguns plugins envolvidos. Emitir um único comando é obviamente muito mais rápido.

Comandos WP-CLI em Geral

Se está habituado a trabalhar no terminal, não há nada de especial no WP-CLI para si. Comandos sempre começam com wp seguido de um comando e subcomando, seguido de parâmetros obrigatórios e opcionais, algo assim:

wp command subcommand requiredparam --optionalparam --optionalparam2=value

Vamos instalar um tema para ver como isso funciona com um comando real:

wp theme install twentyseventeen --activate

Isto irá instalar e ativar o tema Twenty Seventeen em sua instalação do WordPress.

Tenha em atenção que o WP-CLI funcionará com a instalação WordPress em que se encontra atualmente no terminal. Se você alternar os diretórios para ir para outra instalação do WordPress, ele funcionará com esse.

Exemplos Úteis

Foi o WP-CLI em poucas palavras! Enquanto há algumas coisas avançadas que você pode fazer, que nós vamos chegar em um momento, você já sabe o suficiente para começar e fazer o que você precisa fazer. Eu recomendo dar uma olhada na lista de comandos, tente alguns deles. Vamos dar uma olhada em algumas coisas úteis aqui, em seguida, passar a usar WP-CLI sobre SSH e usando scripts bash.

Instalando o WordPress

Eu uso muito WP-CLI para configurar ambientes de teste, o primeiro passo do qual é uma instalação de baunilha. Aqui está uma lista de comandos que eu executo:

wp core download
wp core config --dbname=mydbname --dbuser=mydbuser --dbpass=mydbpass --dbhost=localhost --dbprefix=whebfubwef_ --extra-php <<PHP
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
PHP
wp db create
wp core install --url=http://siteurl.com --title=SiteTitle --admin_user=username --admin_password=mypassword [email protected]

Repara como isto é fixe! A versão mais recente do WordPress é baixada usando o primeiro comando. O segundo comando configura o arquivo de configuração com o acesso ao banco de dados e algum PHP adicional no final. As constantes adicionais garantem que temos nossas opções de depuração para testes. Temos um guia detalhado aqui se você quiser saber mais sobre como depurar o WordPress.

O terceiro comando cria o banco de dados (WP-CLI usa as informações de acesso ao banco de dados do arquivo de configuração) e, finalmente, instalamos o WordPress usando alguns parâmetros.

Reinstalar o WordPress Core

Você também pode reinstalar o WordPress core usando WP-CLI. O seguinte comando faria o download do núcleo do WordPress sem os temas e plugins padrão.

wp core download --skip-content --force

Modificar URL do WordPress

Há muitas razões pelas quais você pode precisar ou querer alterar sua URL do WordPress. Talvez você esteja mudando domínios, mudando para um subdomínio, atualizando de www para non-www, movendo arquivos ou mesmo migrando de HTTP para HTTPS. Seja qual for o caso, você pode usar facilmente o comando wp option update para isso. Aqui está um exemplo abaixo:

wp option update home 'http://example.com'
wp option update siteurl 'http://example.com'

Lista de Plugins Atuais com Detalhes

Para obter uma lista dos plugins atuais instalados em um site, simplesmente use o seguinte comando. Neste exemplo, você pode ver que temos o plugin SEO de Esquema e Levedura instalado. Ele também retornará o status (ativo/desativado), se houver uma atualização disponível, e a versão atual.

wp plugin list
Lista de plugins WP-CLI
Lista de plugins WP-CLI

Instalação de Vários Plugins

Para instalar vários plugins você pode simplesmente empilhar os parâmetros. Aqui está um exemplo que baixa e ativa 3 plugins:

wp plugin install advanced-custom-fields jetpack ninja-forms --activate

Note que os nomes dos plugins vêm do seu nome no repositório. A maneira mais fácil de descobrir isso é visitar sua página e olhar para a URL ou usar o wp plugin search searchterm que lhe dará uma lista no terminal.

URL do repositório de plugins do WordPress
URL do repositório de plugins do WordPress

Você também pode instalar versões mais antigas dos plugins do WordPress, se necessário, com o atributo --version.

wp plugin install wordpress-seo --version=4.8 --activate

Ainda mais legal, você pode instalar plugins a partir de arquivos remotos, não apenas o repositório que é útil se você estiver desenvolvendo um plugin, ou usando um plugin premium. O seguinte comando instala dois plugins do repositório e um de um servidor Amazon S3.

wp plugin install advanced-custom-fields jetpack https://d1qas1txbec8n.cloudfront.net/wp-content/uploads/2015/06/23073607/myplugin.zip --activate

Desativar Vários Plugins

Para desativar um único plugin você pode executar o seguinte comando.

wp plugin deactivate wordpress-seo

Para desativar todos os seus plugins de uma só vez, execute o seguinte comando.

wp plugin deactivate --all
WP-CLI desactivar todos os plugins
WP-CLI desativar todos os plugins

Este comando acima pode ser útil se você está resolvendo problemas de compatibilidade e simplesmente precisa desativar todos os plugins em um só golpe. Você pode voltar atrás e habilitá-los um a um, testando à medida que avança.

Atualização de Plugins

Você também pode atualizar manualmente os plugins do WordPress. Exemplo abaixo:

wp plugin update wordpress-seo
WP-CLI atualiza manualmente o plugin WordPress
WP-CLI atualiza manualmente o plugin WordPress

Pesquisa e Substituição de Banco de Dados

Uma das principais razões pelas quais é difícil migrar um site apenas copiando e colando um banco de dados é que o banco de dados contém arrays serializados. Se você necessitar substituir todos os exemplos de http://testsite.com com http://livewebsite.com seus arrays serializados não farão o sentido porque a contagem da corda não combinará acima.

O comando search-replace des-serializa os arrays primeiro, depois executa a pesquisa e substitui e, em seguida, re-serializa os arrays. Você pode fazer isso com um simples comando:

wp search-replace oldstring newstring

Parâmetros adicionais permitem que você faça muito mais, incluindo visualizar o que será substituído usando --dry-run.

Importação e Exportação

Existem duas formas de exportar conteúdo com WP-CLI. Você pode criar um arquivo XML, assim como a ferramenta de exportação do WordPress, ou pode exportar/importar o banco de dados bruto. Eu acho o mais recente muito mais útil na minha rotina diária, ele vem a calhar quando sincronizo sites.

wp db export é tudo que você precisa fazer para criar um arquivo SQL e wp db import file.sql é tudo que você precisa para importá-lo. Funciona como um charme, apenas tenha cuidado para não sobrescrever nada do que você precisa, importar irá basicamente despejar o banco de dados existente e usar o arquivo SQL fornecido em seu lugar.

Adicionar, Atualizar, Excluir Usuários

Você pode adicionar, atualizar e excluir usuários com o WP-CLI.

# List user IDs
$ wp user list --field=ID
1

# Create a new user.
$ wp user create john [email protected] --role=author
Success: Created user 3.
Password: HOh897%*(&^R8

# Update an existing user.
$ wp user update 123 --display_name=Beth --user_pass=bethpass
Success: Updated user 123.

# Delete user 123 and reassign posts to user 443
$ wp user delete 123 --reassign=443
Success: Removed user 123 from http://example.com

Gerir Funções e Capacidades

WP-CLI pode gerenciar papéis para você muito facilmente usando o comando de wp role. Isso é muito legal se você quiser testar como seu plugin funciona com funções personalizadas, mas você não realmente criar as funções dentro de seu plugin.

wp role create organizer Organizer
wp cap list 'editor' | xargs wp cap add 'organizer'
wp cap add 'organizer' 'manage-events'

Os comandos acima criarão uma nova função (Organizer), adicionarão todas as capacidades da função de editor a ela e então adicionarão uma nova capacidade: eventos de gerenciamento. Com os comandos certos, você pode usar o WP-CLI para alterar sua senha do WordPress.

Gerar Dados de Teste

Eu amo todo o tipo de funções de falsificação – aqueles que adicionam conteúdo fictício ao seu site que você pode usar para testes. WP-CLI tem um par destes embutidos, aqui estão algumas funções que irão gerar usuários, termos e posts.

wp user generate --count=5 --role=editor
wp user generate --count=10 --role=author
wp term generate --count=12
wp post generate --count=50

Administrar Eventos WP-Cron

Pode gerir eventos WP-Cron e ou um trabalho WordPress Cron no WP-CLI. Por exemplo, o seguinte comando lhe dará a lista de eventos do cron atual.

wp cron event list
lista de eventos wp-cron
lista de eventos wp-cron

Eliminar Transientes

Você pode até mesmo excluir e limpar um ou todos os transientes usando o seguinte comando.

wp transient delete --all

Se você estiver executando multisite, você precisará de um comando um pouco mais complicado. Por padrão, o comando só verifica a tabela wp_options. Ele não verifica por wp_1_options, wp_2_options, etc.

wp transient delete --all --network && wp site list --field=url | xargs -n1 -I % wp --url=% transient delete --all

Limpar a Tabela wp_options

A tabela wp_options pode ser um culpado comum para tempos de consulta lentos no seu site devido a dados auto-carregados que são deixados para trás de plugins e temas de terceiros. Confira este grande artigo da WP Bullet sobre como usar WP-CLI para limpar sua tabela wp_options.

Eliminar Revisões do WordPress

Em grandes sites, as revisões do WordPress podem somar-se muito rapidamente a milhares de linhas na sua base de dados que não são necessárias. É possível eliminar revisões de lançamentos com WP-CLI. Aqui está um exemplo do comando:

$ wp post delete $(wp post list --post_type='revision' --format=ids)
WP-CLI eliminar revisões do WordPress
WP-CLI eliminar revisões do WordPress

Modo de Manutenção de Controle

A partir do WP-CLI v2.2.0, pode agora controlar o modo de manutenção no seu site WordPress. Exemplo:

wp maintenance-mode activate
wp maintenance-mode deactivate
wp maintenance-mode status

Indexação de Dados com o Elasticsearch

O Elasticsearch é um mecanismo de busca de texto completo de código aberto. É usado para indexar dados e pesquisar esses dados incrivelmente rapidamente. Nós oferecemos isto como um add-on para clientes Kinsta. Você pode usar os comandos do ElasticPress WP-CLI para realizar a indexação sobre SSH. Exemplo:

wp elasticpress index [--setup] [--network-wide] [--posts-per-page] [--nobulk] [--offset] [--show-bulk-errors] [--post-type]

Trabalhando com Sites Multilíngües

WP-CLI v2.0.0.0 inclui uma nova família de comandos wp i18n para aqueles que trabalham com sites multilingues. Por exemplo, você pode criar um arquivo POT para um plugin ou tema do WordPress.

wp i18n make-pot  [] [--slug=] [--domain=] [--ignore-domain] [--merge[=]] [--exclude=] [--skip-js]

Veja a documentação do comando i18n.

Usando WP-CLI com WooCommerce

Trabalhando com sites de comércio eletrônico? 🛒 Recomendamos verificar o incrível guia de desenvolvimento do WP-CLI WooCommerce do Robot Ninja para obter comandos rápidos e fáceis de usar. A geração de uma lista de clientes, ordens e até mesmo a criação de produtos a granel são possíveis com o WP-CLI.

Usando o WP-CLI Remotamente

Uma das melhores coisas que pode fazer com o WP-CLI é gerir as suas instalações remotas do WordPress. Este é verdadeiramente um sonho de um gerente de site se tornar realidade.

Para executar comandos WP-CLI em um servidor remoto via SSH você precisava previamente do comando wp-cli-ssh addon. Mas a partir da v0.24.0, isto agora faz parte do próprio WP-CLI! 👏

Importante: Você precisa do WP-CLI instalado tanto no computador a partir do qual você está executando o comando quanto no seu servidor.

Configuração de Servidores Remotos

Você pode configurar seus servidores global ou localmente. Para configurá-los globalmente use o arquivo config.yml. Você também pode usar os arquivos wp-cli.yml ou wp-cli.local.yml em seu diretório de trabalho atual.

A configuração dos servidores funciona mais ou menos assim, cole isso em um dos arquivos mencionados:

ssh:

  staging:
    cmd: ssh %pseudotty% [email protected] %cmd%
    url: http://myseite.com
    path: /www/path/to/site/root

Quando tudo isso estiver pronto, você pode digitar o seguinte comando para atualizar o WordPress em seu site remoto:

wp ssh core update --host=staging

Se você possui ou gerencia muitos sites, eu acho que você pode ver que isso é incrível! O script pedirá uma senha, mas se você usar chaves RSA para entrar no sistema, você pode renunciar a isso também. Dê uma olhada neste artigo para configurar isso.

Usando Scripts Bash

Os scripts Bash poupam ainda mais tempo ao automatizar tarefas. Lembra-se como precisávamos digitar um monte de comandos para instalar o WordPress? Podes fazer isso com um único guião de bash. Dentro de um diretório, crie um arquivo install.sh. Cole o mesmo código que tínhamos antes e salve-o.

wp core download
wp core config --dbname=mydbname --dbuser=mydbuser --dbpass=mydbpass --dbhost=localhost --dbprefix=whebfubwef_ --extra-php <<PHP
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
PHP
wp db create
wp core install --url=http://siteurl.com --title=SiteTitle --admin_user=username --admin_password=mypassword [email protected]

Tudo que você precisa fazer agora é digitar bash install.sh e tudo será feito por você, sem intervenção do usuário. Se você gerenciar um monte de sites você pode configurar todos os seus ambientes e criar um script bash como este:

wp ssh core update --host=clientA
wp ssh core update --host=clientB
wp ssh core update --host=clientC
wp ssh core update --host=clientD

Quando uma nova versão do WordPress é lançada, isso pode economizar muito tempo! Como você pode fazer o que quiser com o WP-CLI, você pode até mesmo atualizar temas e plugins regularmente em vários sites de clientes ao mesmo tempo.

Resumo

WP-CLI é realmente o sonho do desenvolvedor e gerente do website tornado realidade. Como desenvolvedores, podemos criar sites de teste em um jiffy, adicionar conteúdo de teste e fazer todos os tipos de magia de importação/exportação. Os gerentes de site podem lidar com atualizações de site e outras tarefas para vários sites com comandos únicos. Certifique-se de verificar as notas de lançamento do WP-CLI v2!

Se ainda não tentaste o WP-CLI, peço-te que tentes. Há também um monte de comandos de comunidade como o WP-CLI-SSH que adicionam ainda mais funcionalidades fantásticas! Se você estiver enfrentando problemas, certifique-se de verificar a documentação de problemas comuns do WP-CLI.

Não se esqueça que a arquitetura baseada no Google Cloud da Kinsta suporta WP-CLI fora da caixa. Se você gostaria de experimentar a mais moderna arquitetura de hospedagem do WordPress e ter acesso a grandes ferramentas como WP-CLI, experimente a nossa hospedagem gerenciada do WordPress.

Daniel Pataki

Oi, meu nome é Daniel, sou o CTO aqui na Kinsta. Você talvez me conheça da Smashing Magazine, WPMU Dev, Tuts+ e outras revistas de WordPress/Desenvolvimento. Além de WordPress e PHP, passo a maior parte do meu tempo com Node, React, GraphQL e outras tecnologias no espaço Javascript. Quando não estou trabalhando para criar a melhor solução de hospedagem do universo, coleciono jogos de tabuleiro, jogo pebolim no escritório, viajo ou toco guitarra e canto em uma banda não muito boa.