I was humbled to be invited to speak at WordCamp San Francisco this year at the last minute, and I’m excited to share it with you all!
You can find the slides in PDF here.
Embedded slides and sample plugin code available after the break.
[edit] Slides Updated! Full Details below. [/edit]
Included below is a simple backup plugin — you’ll probably want to change default SQL dump storage locations for your uses in production, but it’s a good start!
If you have any questions, let me know in the comments!
<?php WP_CLI::add_command( 'migrate', 'DH_Migrate_Command' ); /** * DreamHost Migrate Plugin * * @package DH_Migrate_Command * @subpackage commands/community * @maintainer Mike Schroder */ class DH_Migrate_Command extends WP_CLI_Command { /** * Backup entire WordPress install, including core, plugins and database. * * @param array $args * @param array $assoc_args * @synopsis [backup_filename] [--no-db] [--db-name=<filename>] */ function backup( $args, $assoc_args ) { $filename = $dbname = null; $backup_directory = '../'; // If a filename isn't specified, default to "Site's Title.tar.gz". if ( empty( $args ) ) $filename = $backup_directory . get_bloginfo() . '.tar.gz'; else $filename = $args[0]; // If --no-db is specified, don't include the database in backup if ( ! isset( $assoc_args['no-db'] ) ) { $dbname = isset( $assoc_args['db-name'] ) ? $assoc_args['db-name'] : 'database_backup.sql'; WP_CLI::run_command( array( 'db', 'export', $backup_directory . $dbname ), array() ); } // Using esc_cmd to automatically escape parameters. // We can't use --exclude-vcs, because it's not available on OSX. WP_CLI::line( "Backing up to $filename ..." ); $result = WP_CLI::launch( WP_CLIUtilsesc_cmd( " tar --exclude '.git' --exclude '.svn' --exclude '.hg' --exclude '.bzr' -czf %s . -C %s %s ", $filename, $backup_directory, $dbname ), false ); // If we created a database backup, remove the temp file. if ( $dbname && ! unlink( $backup_directory . $dbname ) ) WP_CLI::warning( "Couldn't remove temporary database backup, '$dbname'." ); if ( 0 == $result ) { WP_CLI::success( "Backup Complete." ); } else { WP_CLI::error( "Backup Failed." ); } } }
- Updated in Slides:
- Per @scribu’s comment, it’s preferable not to directly drop a command’s file into the ‘commands’ directory when using the standard install method, since during an update, they may be removed.
- The installer.sh location was recently changed so that the script is pulled over https. The new suggested command to install is:
curl https://raw.github.com/wp-cli/wp-cli.github.com/master/installer.sh | bash
Really great talk, Mike. It was especially cool thanks to your custom command example! /five
Thanks! Glad to hear you enjoyed it!
Re: invoking WP-CLI on Vagrant from host machine, I made a convenience wrapper called vassh: https://gist.github.com/westonruter/5992510
The big pain of doing `vagrant ssh` is that it doesn’t drop you into the corresponding working directory in the Vagrant guest’s synced_folder, so you have to `cd` to the dir and then run `wp`. So `vassh` will make sure you start out in the corresponding directory. So if you’re in your WordPress project on your host machine, all you need to do is:
$ vassh wp core update
There’s also a wrapper called `vasshin` which will shell you into Vagrant at the current directory, with a prompt for entering commands. This gets you colors and interactive tty. You can also pass commands as arguments to `vasshin` to have them executed right away in the colorized tty (with some additional Vagrant .bash_login echoes and SSH connection close):
$ vasshin wp post list # nice table!
Thanks for the great talk – I’m incredibly interested and already have installed wp-cli on a Mediatemple DV and GS. The grid install was a bit complicated – I put together a walkthrough for anyone running into the same problems: http://www.razorfrog.com/blog/installing-wp-cli-on-mediatemple-grid-server/
Hey Mike,
Thanks a lot for giving the talk!
One small thing: I wish you hadn’t suggested people drop custom commands inside the wp-cli/ folder. They will likely get deleted once you update WP-CLI.
Thanks for the note!
Hadn’t thought of that, since many of my installs are GIT checkout based (due to legacy reasons). I’ll update the post (and then the slides) to reflect that.
[edit] Slides Updated, with full details at end of post. [/edit]
Hi I have a quick question. I want to know if WP-CLI is updated on the current version of wordpress. I want to do an update to my wordpress but I don’t want to run into any problems.
Thank you
You’ll still want to be sure the plugins and themes you’re using are compatible with the latest version of WordPress, but WP-CLI uses WordPress’ update functions, so it doesn’t need to be updated each time WordPress has a new release to give you the newest version.