Simplify your day to day tasks with WP-CLI

Type and run, automate




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

 

Hola

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?


Command
Line
Interface


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

New to the CLI?



Cheatsheet


Books


Anyone some more source?

Made by


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

And many more ...

Why WP-CLI?


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 https://raw.github.com/wp-cli/wp-cli.github.com/master/installer.sh | bash 


Full instructions: wp-cli.org

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.


Again


Why WP-CLI?

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 http://nu.nl http://nu.dev

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 wp-cli.org
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

#!/bin/bash
#
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

advanced-custom-fields
https://github.com/Jeradin/acf-website-field/archive/master.zip
wordpress-seo 

Simplify multiple steps


Bash install script for a clean WordPress installation

wp db migrate


Not a real command! But you can mimic it.

http://www.wptavern.com/wordpress-plugin-review-wp-db-migrate

wp db migrate


wp db import dump.sql
wp search-replace http://wp.dev http://wp.nl
wp db export prod.wp.sql

Borrow code!


User import cron

Starting point was  wp user import-csv
https://github.com/wp-cli/wp-cli/blob/master/php/commands/user.php#L497



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

@jmslbam

j@jaimemartinez.nl

jaimemartinez.nl
Made with Slides.com