Simplify your day to day tasks with WP-CLI

Type and run, automate

Jaime Martínez | @jmslbam | #wpmeetup010 | 25 nov 2013



Jaime Martinez

Happy coder @ Level Level

Feature contributor and tester WP-CLI

Long time WordPress enthousiast

Let me seduce you to the 
WP-CLI side

Command what?


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

New to the CLI?



Anyone some more source?

Made by

Setup by Andreas Creten.
Actively maintained by Cristi Burcă a.k.a. Scribu  & Daniel Bachhuber

And many more ...


Uses WordPress to perform operations

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

Install WP-CLI

curl | bash 

Full instructions:

Default location: ~/.wp-cli/

Add  ~/.wp-cli/bin/ to your $PATH

MAMP? Thank you Luc

Use Vagrant

Varying Vagrant Vagrants from 10up
Salty WordPress from HumanMade

Using it live?

SSH access to your server

Exeception for WP Remote through the wp-remote-cli package.



Long running tasks

  • Imports / Exports
  • Regenerating images
  • Bulk processing posts 

Repetitive tasks

  • Cron jobs
  • Base WordPress install

Handy commands

wp core update
wp core update-db 

wp db import
wp search-replace

wp user update 1 --user_pass=test

wp media regenerate 

wp scaffold

Don’t copy & paste

wp scaffold cpt|tax|theme|plugin  

More info this topic on
Scaffolding Custom post types and taxonomies 

Combine commands

No need for new commands

--porcelain  is your friend

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. Create Post & Attach Image

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=test1 --porcelain)

D. 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?

Simplify multiple steps

It’s no composer but it does the job

cat plugins.txt | xargs wp plugin install


Simplify multiple steps

Bash install script for a clean WordPress installation

wp db migrate

Not a real command! But you can mimic it.

wp db migrate

wp db import dump.sql
wp search-replace
wp db export prod.wp.sql

Borrow code!

User import cron

Starting point was  wp user import-csv

Almost there!

Extending WP-CLI

Community packages
Community commands

Community commands

WordPress Plugins can add commands

Available per WordPress install

<?php // Plugin Name: Sweet Plugin if ( defined('WP_CLI') && WP_CLI ) { include __DIR__ . '/my-command.php'; }

Community packages

These commands are globally available for every install

Which packages?
Package index
Add them to the ~/.wp-cli/composer.json

How to install community packages

Any questions?

Jaime Martinez

Made with