Working with


Type and run, automate

Jaime Martínez | @jmslbam | #WC024 | 1 sept 2018

Jaime Martínez

Happy coder @ Level Level

Long time WordPress enthousiast

CLI what?



A direct, text-based, interface to a computer.

New to the (WP-)CLI?

View my previous WP-CLI talk with some extra references


Uses WordPress to perform operations

  • Run long running tasks like without time-outs
  • Repetitive tasks
  • Saves time
  • Extensible with your own commands

Long running tasks

  • Imports / Exports
  • Regenerating images
  • Bulk processing posts 

Repetitive tasks

  • Cron jobs / nightly imports
  • Base WordPress install
  • Generate test content
  • Flushing rewrite rules

Handy commands

wp core update
wp core update-db 

wp db import
wp search-replace http://nu.test

wp user update 1 --user_pass=test

Handy commands

wp rewrite flush

wp option set blogname 

wp media regenerate 

wp transient delete-expired 

Combine commands

No need for new commands

--porcelain  is your friend

Output just the new post id.


Use the return value (post_id) to attach it to the imported file.
wp media import ~/Pictures/jaimemartinez.png --post_id=$(wp post create --post_name=wpmeetup --post_title='Profile picture of Jaime' --porcelain)

A. Bulk publish posts

wp post update $(wp post list --post_type='zombie' --format=ids) --post_status=publish
step 1
wp post list --post_type='zombie' --format=ids
step 2
wp post update 33 45 68 --post_status=publish

B. Regenerate last 50 uploaded images

wp media regenerate  $(wp post list --post_type=attachment --format=ids --posts_per_page=50)

C. Update multi-site installation

for url in $(wp site list --fields=url --format=csv | tail -n +2)do wp --url=$url core update-dbdone

Nice, what else?

A. Simplify multiple steps

It’s no composer but it does the job

cat plugins.txt | xargs wp plugin install


B. Simplify multiple steps

wp core multisite-install --url="" --base="" --title="HBO network"  --admin_user=gaya --admin_password=wadup --admin_email="" 

# For each line add a new site within the multisite installation

while read show ;
    # Creating multisite {$show}
    wp site create --slug=$show --title=$show
done < shows.txt


Use it within deployments scripts
See Luc's talk

New stuff

Skip plugins flag

Unload specific broken plugin with fatal error...

wp plugin deactivate my-broken-plugin --skip-plugins=my-broken-plugin
Or just offload all
wp custom-command --skip-plugins

Almost there!


 * @synopsis --handshake[=<secret>] [--a=<b>]

Brackets are optional and can be nested

... dots make it possible to pass 1 of multiple arguments

wp post delete 1 3 4 5 66 798 

Any questions?

Jaime Martínez 

@jmslbam /

WordCamp Nijmegen 2018 - Working with WP-CLI - Barcamp session

By Jaime Martinez

WordCamp Nijmegen 2018 - Working with WP-CLI - Barcamp session


  • 1,987