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 e loops no terminal.

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!

Compartilhe

Allyson Souza
Allyson Souza
Artigos: 24
0 0 votes
Article Rating
Subscribe
Notify of
guest
2 Comentários
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Romulo Torres Zoch
5 anos atrás

Excelente artigo!

Gostei muito, e me inspirou a experimentar o WP-CLI.
Faz tempo que ouço falar, mas ainda não tinha visto algo maneiro assim, pra dar vontade de usar

Muito obrigado pelo post

2
0
Would love your thoughts, please comment.x

Aviso ⚠️

A Haste encerrou suas atividades, logo não estamos atendendo novos clientes. O site se mantém no ar por preservação de histórico e conteúdo.

Caso encontre ainda algum link ou formulário de contato, esteja ciente de que não iremos retornar.

Muito obrigado a todos que fizeram parte da nossa história.