Simplify your day to day tasks with WP-CLI
Type and run, automate
Jaime Martínez | @jmslbam | #wpmeetup010 | 25 nov 2013
Jaime Martinez
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?
Anyone some more source?
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
Using it live?
SSH access to your server
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 scaffold
Don’t copy & paste
wp scaffold cpt|tax|theme|plugin
More info this topic on wp-cli.org
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-db
done
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.
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
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
Any questions?
Jaime Martinez
j@jaimemartinez.nl