Save 37% off PRO during our Black Friday Sale! »

Magical WordPress Management using WP-CLI

Magical WordPress Management using WP-CLI

Learn how using the command line can change your WordPress development life. Does updating all your plugins by running “wp plugin update–all” sound too good to be true? Enter WP-CLI, an open source WordPress management tool. Learn how to install it locally or globally on your host, perform common WordPress administration tasks, and expand its functionality with plugins of your own.

Video at:
http://wordpress.tv/2013/08/06/mike-schroder-magical-wordpress-management-using-wp-cli/

Sample code at:
http://www.getsource.net/2013/07/wcsf2013-wpcli/

46fa959634a063abefcac94eaf191eca?s=128

Mike Schroder

July 27, 2013
Tweet

Transcript

  1. Mike  Schroder  |  @GetSource   Developer,  WordPress  Specialist  at  DreamHost

      MAGICAL WORDPRESS MANAGEMENT USING WP-CLI WordCamp  San  Francisco  2013  
  2. RANDOM FACTS   Third  Culture  Kid   Enjoys  Coffee  &

     Sailing   Blogs  at  getsource.net   CREDENTIALS   Mike  Schroder,  a.k.a.  DH-­‐Shredder,  a.k.a  @GetSource   Happy  DreamHost  Employee   WordPress  Core  Contributor   WordPress  3.5  Recent  Rockstar   Trusted  WP-­‐CLI  Feature  Contributor   Mike  Schroder  |  @GetSource  |  #wcsf  2013    
  3. THERE ARE TWO GROUPS OF PEOPLE. Mike  Schroder  |  @GetSource

     |  #wcsf  2013    
  4. THOSE WHO USE THE COMMAND LINE Mike  Schroder  |  @GetSource

     |  #wcsf  2013    
  5. THOSE WHO ARE GOING TO USE THE COMMAND LINE Mike

     Schroder  |  @GetSource  |  #wcsf  2013    
  6. DON’T BE AFRAID OF THE CLI IT’S  YOUR  FRIEND.  

    Mike  Schroder  |  @GetSource  |  #wcsf  2013    
  7. OH, YOU LIKE THE CLI? WP-­‐CLI  WILL  MAKE  YOUR  LIFE

     BETTER   Mike  Schroder  |  @GetSource  |  #wcsf  2013    
  8. SUPER COOL OPEN SOURCE TOOL TO MANAGE WORDPRESS Mike  Schroder

     |  @GetSource  |  #wcsf  2013    
  9. HEADED UP BY CRISTI BURCĂ (SCRIBU) AND ANDREAS CRETEN Mike

     Schroder  |  @GetSource  |  #wcsf  2013    
  10. USES WORDPRESS ITSELF TO PERFORM OPERATIONS Mike  Schroder  |  @GetSource

     |  #wcsf  2013    
  11. AUTOMATION! Mike  Schroder  |  @GetSource  |  #wcsf  2013    

  12. WHAT CAN I DO WITH IT? Mike  Schroder  |  @GetSource

     |  #wcsf  2013    
  13. Mike  Schroder  |  @GetSource  |  #wcsf  2013    

  14. NO, REALLY. Mike  Schroder  |  @GetSource  |  #wcsf  2013  

     
  15. $ wp core update UPDATE WORDPRESS Mike  Schroder  |  @GetSource

     |  #wcsf  2013    
  16. $ wp plugin install <slug or .zip> INSTALL A PLUGIN

    Mike  Schroder  |  @GetSource  |  #wcsf  2013    
  17. $ wp theme activate <slug> CHANGE THEME Mike  Schroder  |

     @GetSource  |  #wcsf  2013    
  18. $ wp db export [filename] BACKUP YOUR DATABASE Mike  Schroder

     |  @GetSource  |  #wcsf  2013    
  19. $ wp plugin update-all UPDATE PLUGINS Mike  Schroder  |  @GetSource

     |  #wcsf  2013    
  20. $ wp theme update-all UPDATE THEMES Mike  Schroder  |  @GetSource

     |  #wcsf  2013    
  21. $ wp search-replace <old> <new> REPLACE TEXT IN DB Mike

     Schroder  |  @GetSource  |  #wcsf  2013    
  22. WHAT IS THIS SORCERY? Mike  Schroder  |  @GetSource  |  #wcsf

     2013    
  23. Mike  Schroder  |  @GetSource  |  #wcsf  2013    

  24. SOLD. HOW DO I GET THIS AWESOMENESS? Mike  Schroder  |

     @GetSource  |  #wcsf  2013    
  25. -­‐    SSH  access  to  your  WordPress  install's  directory  

    -­‐    PHP  5.3.2+   -­‐    WordPress  3.4+   -­‐    Enough  RAM  for  shell  processes  to  run  WordPress   -­‐    Linux  or  MacOS  (for  now)   WHAT DO I NEED TO RUN IT? Mike  Schroder  |  @GetSource  |  #wcsf  2013    
  26. $ curl https://raw.github.com/wp-cli/wp- cli.github.com/master/installer.sh | bash INSTALL IN LOCAL USER

    Full Instructions at: wp-­‐cli.org     Mike  Schroder  |  @GetSource  |  #wcsf  2013    
  27. BUT WAIT, THERE’S MORE! Mike  Schroder  |  @GetSource  |  #wcsf

     2013    
  28. WP-CLI IS EXTENSIBLE! Mike  Schroder  |  @GetSource  |  #wcsf  2013

       
  29. Run/Alias:     $ wp --require='cmd_name.php’ wp-­‐cli.yml   require: /path/to/cmd_name.php

    ADD YOUR OWN LOCALLY Mike  Schroder  |  @GetSource  |  #wcsf  2013    
  30. OR IN YOUR PLUGINS if ( defined('WP_CLI') && WP_CLI )

    { include( PLUGIN_DIR . '/lib/wp-cli.php' ); } Mike  Schroder  |  @GetSource  |  #wcsf  2013    
  31. $ wp migrate backup [file.tar.gz] [--no-db] [--db-name=<file.sql>] CUSTOM COMMAND: BACKUP!

    Mike  Schroder  |  @GetSource  |  #wcsf  2013    
  32. Strategy -­‐    Use  Built-­‐in  SQL  Backup  Command   -­‐

       Create  .tar.gz  of  install’s  ciles  and  database.   CUSTOM COMMAND: BACKUP! Mike  Schroder  |  @GetSource  |  #wcsf  2013    
  33. ADD COMMAND <?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 { // ... Mike  Schroder  |  @GetSource  |  #wcsf  2013    
  34. DEFINE YOUR SUBCOMMAND /** * 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 ) { // ... $args Stand-­‐alone  arguments   $assoc_args --arg=value  style  in  associative  array   Mike  Schroder  |  @GetSource  |  #wcsf  2013    
  35. DEFINE YOUR SUBCOMMAND /** * 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 ) { // ... @synopsis WP-­‐CLI  specicic  comment  to  automatically  force  proper  CLI  syntax   Mike  Schroder  |  @GetSource  |  #wcsf  2013    
  36. 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]; // ... Mike  Schroder  |  @GetSource  |  #wcsf  2013    
  37. // 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() ); } // ... Mike  Schroder  |  @GetSource  |  #wcsf  2013    
  38. // 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_CLI\Utils\esc_cmd( " tar \ --exclude '.git' \ --exclude '.svn' \ --exclude '.hg’ \ --exclude '.bzr' \ -czf %s . -C %s %s \ ", $filename, $backup_directory, $dbname ), false ); // ... Mike  Schroder  |  @GetSource  |  #wcsf  2013    
  39. // 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." ); } } // End backup } // End DH_Migrate_Command Mike  Schroder  |  @GetSource  |  #wcsf  2013    
  40.     -­‐    wp-­‐cli.org   -­‐    getsource.net/tag/wp-­‐cli/  

    -­‐    halfelf.org/2012/command-­‐line-­‐wp       -­‐    ciles.fosswire.com/2007/08/fwunixref.pdf     FURTHER LEARNIFICATION: WP-CLI: CLI Cheat Sheet: Mike  Schroder  |  @GetSource  |  #wcsf  2013