Executando comandos do wp-cli para múltiplos posts ou usuários

Nosso texto hoje é sobre uma dica prática, que pode te ajudar a executar modificações em múltiplos posts usando o wp-cli.

Já precisamos atualizar várias meta informações de posts que estavam erradas, e o número de posts já estava na casa dos milhares. O wp-cli possui o comando wp post meta update, que nos permite atualizar uma meta passando o ID do post, a meta key e o meta value desejado. Assim:

wp post meta update 65 read_time "45 min"

No exemplo acima estamos atualizando a meta read_time do post de ID 65, passando o valor 45 min. Infelizmente não há uma opção para atualizar todos os posts ao invés de passar seu ID, como fazer então?

O wp-cli possui o comando wp post list, que nos permite listar os posts de nossa instalação. Se rodarmos ele sem parâmetros, ele dará saída em uma tabela no terminal:

C:\wordpress> wp post list
+----+-------------+-----------+---------------------+-------------+
| ID | post_title | post_name | post_date | post_status |
+----+-------------+-----------+---------------------+-------------+
| 5 | Post 2 | post-2 | 2019-02-19 12:14:38 | publish |
| 6 | Post 3 | post-3 | 2019-02-19 12:14:38 | publish |
| 7 | Post 4 | post-4 | 2019-02-19 12:14:38 | publish |
| 8 | Post 5 | post-5 | 2019-02-19 12:14:38 | publish |
| 9 | Post 6 | post-6 | 2019-02-19 12:14:38 | publish |
| 10 | Post 7 | post-7 | 2019-02-19 12:14:38 | publish |
| 11 | Post 8 | post-8 | 2019-02-19 12:14:38 | publish |
| 12 | Post 9 | post-9 | 2019-02-19 12:14:38 | publish |
| 13 | Post 10 | post-10 | 2019-02-19 12:14:38 | publish |
| 14 | Post 11 | post-11 | 2019-02-19 12:14:38 | publish |
| 1 | Olá, mundo! | ola-mundo | 2019-02-19 12:09:53 | publish |
+----+-------------+-----------+---------------------+-------------+

Entretanto precisamos apenas dos ID’s dos posts, portanto podemos passar o parâmetro –format=ids em nosso comando:

C:\wordpress>wp post list --format=ids
14 13 12 11 10 9 8 7 6 5 1

Pronto, apenas os ID’s dos posts são retornados. Agora iremos utilizar as diferentes técnicas, no Linux e no Windows, para iterar sobre estes resultados com um for e conseguir executar comandos para cada um destes ID’s retornados.

Fazendo for para executar comandos do wp-cli no Linux

No terminal do linux, podemos utilizar a seguinte sintaxe para realizar nosso loop, em que POST_ID será a variável a armazenar o ID de cada post a cada iteração, nosso comando do wp cli que retorna a lista de ID’s de posts vai dentro dos parênteses:

for POST_ID in $(wp post list --format=ids); do wp post meta update POST_ID read_time "45 min"; done

No exemplo acima então percorremos todos os posts e definimos a meta read_time de cada um como 45 min. Poderíamos utilizar o mesmo princípio para percorrer usuários:

for USER_ID in $(wp user list --field=ID); do wp user update $USER_ID --role=administrator; done

No código acima estamos utilizando o comando wp user list para retornar todos os usuários para o nosso for, e então executamos o comando wp user update para transformar todos em administradores, por exemplo.

Fazendo for para executar comandos do wp-cli no Windows

Se você utiliza o wp-cli no Windows, saiba que também é possível utilizar os comandos do terminal e obter o mesmo resultado. Além da sintaxe dos comandos, a diferença é que iremos primeiro salvar em um arquivo .txt o resultado da wp post list, para então percorrermos cada ID em nosso loop.

wp post list --field=ID > posts.txt

Salvamos em um arquivo posts.txt a lista de ID’s de posts. Agora iremos fazer o for a partir do arquivo:

FOR /F "tokens=1* delims=" %p IN (posts.txt) DO wp post meta update %p my_meta_key "My Value"

A variável %p é a que armazenará o ID do post em cada iteração, podemos utilizá-la após o DO em nosso comando, assim conseguimos utilizar wp post meta %p, especificando o post atual a ter sua meta atualizada. Infelizmente tentamos de várias formas, mas não conseguimos fazer o for no terminal do Windows funcionar sem antes salvarmos o resultado em um arquivo, porém o processo se mantém simples e rápido ainda.

E aí, gostou da dica? Tem alguma técnica que você utiliza para comandos em lote no WP-CLI? Deixe sua opinião nos comentários!

Marcado como: Linha de comandoTerminalWordPressWP-CLI

Tecnólogo em Jogos Digitais pela FATEC São Caetano do Sul, é Designer e Programador. Co-fundador da Haste Design, estúdio que desenvolve projetos diversos de design e web. Desenvolve com WordPress há cerca de 4 anos. Organiza os meetups da comunidade WP São Paulo e busca sempre que possível contribuir com a comunidade.
  • Que legal que te inspirou Rômulo! Vale a pena, desde a instalação do WordPress que fica super fácil, até tarefas como exportação de banco e essas automatizações, já não lembro como era a vida pré-WP-CLI!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *