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

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

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?
Add them to the ~/.wp-cli/composer.json

How to install community packages

Any questions?

Jaime Martinez

WP-CLI - WP meetup010 - 25 nov 2013

By Jaime Martinez

WP-CLI - WP meetup010 - 25 nov 2013

  • 10,915