Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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/

Mike Schroder

July 27, 2013
Tweet

More Decks by Mike Schroder

Other Decks in Technology

Transcript

  1. Mike  Schroder  |  @GetSource  
    Developer,  WordPress  Specialist  at  DreamHost  
    MAGICAL WORDPRESS MANAGEMENT
    USING WP-CLI
    WordCamp  San  Francisco  2013  

    View Slide

  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    

    View Slide

  3. THERE ARE TWO GROUPS OF PEOPLE.
    Mike  Schroder  |  @GetSource  |  #wcsf  2013    

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  13. Mike  Schroder  |  @GetSource  |  #wcsf  2013    

    View Slide

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

    View Slide

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

    View Slide

  16. $ wp plugin install
    INSTALL A PLUGIN
    Mike  Schroder  |  @GetSource  |  #wcsf  2013    

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  21. $ wp search-replace
    REPLACE TEXT IN DB
    Mike  Schroder  |  @GetSource  |  #wcsf  2013    

    View Slide

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

    View Slide

  23. Mike  Schroder  |  @GetSource  |  #wcsf  2013    

    View Slide

  24. SOLD. HOW DO I GET THIS AWESOMENESS?
    Mike  Schroder  |  @GetSource  |  #wcsf  2013    

    View Slide

  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    

    View Slide

  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    

    View Slide

  27. BUT WAIT, THERE’S MORE!
    Mike  Schroder  |  @GetSource  |  #wcsf  2013    

    View Slide

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

    View Slide

  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    

    View Slide

  30. OR IN YOUR PLUGINS
    if ( defined('WP_CLI') && WP_CLI ) {
    include( PLUGIN_DIR . '/lib/wp-cli.php' );
    }
    Mike  Schroder  |  @GetSource  |  #wcsf  2013    

    View Slide

  31. $ wp migrate backup [file.tar.gz]
    [--no-db] [--db-name=]
    CUSTOM COMMAND: BACKUP!
    Mike  Schroder  |  @GetSource  |  #wcsf  2013    

    View Slide

  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    

    View Slide

  33. ADD COMMAND
    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    

    View Slide

  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=]
    */
    function backup( $args, $assoc_args ) {
    // ...
    $args
    Stand-­‐alone  arguments  
    $assoc_args
    --arg=value  style  in  associative  array  
    Mike  Schroder  |  @GetSource  |  #wcsf  2013    

    View Slide

  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=]
    */
    function backup( $args, $assoc_args ) {
    // ...
    @synopsis
    WP-­‐CLI  specicic  comment  to  automatically  force  proper  CLI  syntax  
    Mike  Schroder  |  @GetSource  |  #wcsf  2013    

    View Slide

  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    

    View Slide

  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    

    View Slide

  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    

    View Slide

  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    

    View Slide

  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    

    View Slide