Não estamos aceitando novos projetos no momento, saiba mais
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!
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
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!