Title: WP-CLI – Page 13 – The command line interface for WordPress

---

 [  ](https://profiles.wordpress.org/danielbachhuber/) [Daniel Bachhuber](https://profiles.wordpress.org/danielbachhuber/)
12:00 am _on_ March 22, 2016      

# 󠀁[Version 0.23.0 released](https://make.wordpress.org/cli/2016/03/22/version-0-23-0/)󠁿

It’s hard to believe the last WP-CLIWP-CLI WP-CLI is the Command Line Interface 
for WordPress, used to do administrative and development tasks in a programmatic
way. The project page is [http://wp-cli.org/](http://wp-cli.org/) [https://make.wordpress.org/cli/](https://make.wordpress.org/cli/)
release was only two months ago because this is the longest release post I’ve ever
written. My apologies in advance.

If you don’t make it all of the way through, here’s what you absolutely need to 
know about WP-CLI v0.23.0:

 * This release includes WordPress 4.5 compatibility. Older WP-CLI versions are 
   incompatible with WordPress 4.5. If you’re planning to use WordPress 4.5 in the
   future, you’ll need to upgrade before you do.
 * You can now browse [available packages](http://wp-cli.org/package-index/) with`
   wp package browse`, and install them with `wp package install`. Try `wp package
   install runcommand/db-ack`.
 * There are many new tools for registering commands. Ain’t no more need to extend`
   WP_CLI_Command`. See the [commands cookbook](http://wp-cli.org/docs/commands-cookbook/)
   to learn more.
 * All of the wiki pages moved to a [documentation portal on the website](http://wp-cli.org/docs/),
   including new pages documenting [internal APIs](http://wp-cli.org/docs/internal-api/)
   you can use in your own commands. Pull requests encouraged.

Now that I’ve given away all of the surpises, let’s get on with the release post.

Oh darn, I forgot two more things:

 * For those using the Phar file, which should be most of you, WP-CLI now automatically
   checks for updates, and will prompt you to update as applicable. It even works
   for those using the nightly build. This behavior is configurable, see below.
 * I’ve settled on [runcommand](http://runcommand.io/) as the name for my new WP-
   CLI venture. [Sign up for email updates](http://runcommand.io/) on the website,
   or follow [@runcommand](https://twitter.com/runcommand) on Twitter.

And now, the release post.

### WordPress 4.5 compatibility

WordPress 4.5 loads yet another file in `wp-settings.php`. Because WP-CLI has a 
custom wp-settings-cli.php ([background](http://wp-cli.org/blog/how-wp-cli-loads-wordpress.html)),
WP-CLI v0.23.0 is the only release compatible with WordPress 4.5.

**Importantly, due to the nature of these changes, WP-CLI versions prior to 0.23.0
will be incompatible with WordPress 4.5.**

Inspect the nature of the change in [this pull request](https://github.com/wp-cli/wp-cli/pull/2486).

Want to help fix this? Refill your cup of coffee and dive into [#34936](https://core.trac.wordpress.org/ticket/34936)
on WordPress TracTrac Trac is the place where contributors create issues for bugs
or feature requests much like GitHub.[https://core.trac.wordpress.org/](https://core.trac.wordpress.org/)..

### Install community commands from the Package Index

Consider the following situation ([#2523](https://github.com/wp-cli/wp-cli/issues/2523)):

>  Using the `theme list` command without `--url` parameter shows if a theme is 
> enabled for the network and active in the default site.
>  If you pass the `--url` of a site of the network, this command shows if a theme
> is active in that site.
>  But I can’t find a way to list which themes are inactive in every site of the
> network so I can safely disable and delete them, and i’d love to have this feature

If you had to complete this task using the WordPress network admin, it would take
you hours, if not days. Simply _writing_ the WP-CLI command for this issue took 
me only 3 minutes ([runcommand/find-unused-themes](https://github.com/runcommand/find-unused-themes)).
WP-CLI is genuinely the fastest interface to manage WordPress.

WP-CLI also generally follows the 80/20 rule when deciding whether to introduce 
a new feature. If the feature could be useful to most people, then maybe; otherwise,
probably not. Those 20% shouldn’t be left with the short stick though, particularly
when it comes to the really helpful commands.

Today, I’m proud to reintroduce the [Package Index](http://wp-cli.org/package-index/),
a directory of community-maintained WP-CLI packages. Browse available packages to
install with `wp package browse` ([doc](http://wp-cli.org/commands/package/browse/)).
Once you’ve found the solution you’re looking for, install it with `wp package install`(
[doc](http://wp-cli.org/commands/package/install/)):

    ```
    $ wp package install runcommand/find-unused-themes
    Installing runcommand/find-unused-themes (dev-master)
    Updating /home/vagrant/.wp-cli/packages/composer.json to require the package...
    Using Composer to install the package...
    ---
    Loading composer repositories with package information
    Updating dependencies
    Analyzed 2223 packages to resolve dependencies
    Analyzed 29243 rules to resolve dependencies
     - Installing package
    Writing lock file
    Generating autoload files
    ---
    Success: Package installed successfully.
    $ wp find-unused-themes
    Checking http://wordpress-develop.dev/ for unused themes...
    Checking http://wordpress-develop.dev/foo/ for unused themes...
    +----------------+---------+
    | name           | version |
    +----------------+---------+
    | default        | 1.7.2   |
    | mystore        | 1.0.6   |
    | p2             | 1.5.5   |
    | twentyeleven   | 2.3     |
    | twentyfourteen | 1.6     |
    | twentyten      | 2.1     |
    | twentythirteen | 1.8     |
    | twentytwelve   | 1.9     |
    +----------------+---------+
    ```

Pretty cool, huh? Consider WP-CLI’s package management to be a betaBeta A pre-release
of software that is given out to a large group of users to trial under real conditions.
Beta versions have gone through alpha testing in-house and are generally fairly 
close in look, feel and function to the final product; however, design changes often
occur as part of the process. feature at this time. You may run into [one of the open issues](https://github.com/wp-cli/wp-cli/issues?q=is%3Aopen+sort%3Aupdated-desc+label%3Acommand%3Apackage),
or find a bug that hasn’t been reported yet. If you’re keen to take a deep dive 
into Composer’s internals, helping to improve `wp package` would be a great way 
to start.

Relevant pull requests for `wp package` include [#2442](https://github.com/wp-cli/wp-cli/pull/2442),
[#2460](https://github.com/wp-cli/wp-cli/pull/2460), [#2491](https://github.com/wp-cli/wp-cli/pull/2491),
[#2512](https://github.com/wp-cli/wp-cli/pull/2512), [#2514](https://github.com/wp-cli/wp-cli/pull/2514),
[#2533](https://github.com/wp-cli/wp-cli/pull/2533), [#2534](https://github.com/wp-cli/wp-cli/pull/2534),
[#2537](https://github.com/wp-cli/wp-cli/pull/2537), [#2540](https://github.com/wp-cli/wp-cli/pull/2540),
[#2543](https://github.com/wp-cli/wp-cli/pull/2543), [#2546](https://github.com/wp-cli/wp-cli/pull/2546),
[#2547](https://github.com/wp-cli/wp-cli/pull/2547), [#2555](https://github.com/wp-cli/wp-cli/pull/2555),
[#2561](https://github.com/wp-cli/wp-cli/pull/2561)

### Register more commands

Ever wonder why, when writing your own command, you had to extend `WP_CLI_Command`?
Well, you didn’t need to, actually.

In fact, `WP_CLI::add_command()` ([doc](http://wp-cli.org/docs/internal-api/wp-cli-add-command/))
now supports registering any arbitrary callable as a WP-CLI command. For instance,
here’s a closure command to reset the passwords of one or more users ([runcommand/reset-passwords](https://github.com/runcommand/reset-passwords)):

    ```
    /**
     * Reset passwords for one or more WordPress users.
     *
     * <user>...
     * : Specify one or more user logins or IDs.
     */
    $reset_password_command = function( $args ) {
        $fetcher = new WP_CLIFetchersUser;
        $users = $fetcher->get_many( $args );
        foreach( $users as $user ) {
            wp_update_user( array( 'ID' => $user->ID, 'user_pass' => wp_generate_password() ) );
            WP_CLI::log( "Reset password for {$user->user_login}." );
        }
        WP_CLI::success( 'Passwords reset.' );
    };
    WP_CLI::add_command( 'user reset-passwords', $reset_password_command );
    ```

Want to reuse argument definition between commands? You can now register command
synopsis as the third argument to `WP_CLI::add_command()` ([runcommand/hook](https://github.com/runcommand/hook)):

    ```
    WP_CLI::add_command( 'hook', $hook_command, array(
        'shortdesc' => 'List callbacks registered to a given action or filter.',
        'synopsis' => array(
            array(
                'name'        => 'hook',
                'type'        => 'positional',
                'description' => 'The key for the action or filter.',
            ),
            array(
                'name'        => 'format',
                'type'        => 'assoc',
                'description' => 'List callbacks as a table, JSON, or CSV.',
                'optional'    => true,
                'options'     => array( 'table', 'json', 'csv' ),
                'default'     => 'table',
            ),
        ),
    ) );
    ```

Note the `default` argument attribute for `format`. WP-CLI accepts `default` and`
options` as a part of argument registration to make it easier to process user input
within your command. These attributes can be also defined in the callable’s PHPDoc:

    ```
    /**
     * List callbacks registered to a given action or filter.
     *
     * <hook>
     * : The key for the action or filter.
     *
     * [--format=<format>]
     * : List callbacks as a table, JSON or CSV.
     * ---
     * options:
     *   - table
     *   - json
     *   - csv
     * default: table
     * ---
     */
    $hook_command = function( $args, $assoc_args ) {
    ```

Check out the [commands cookbook](http://wp-cli.org/docs/commands-cookbook/) for
a deep dive into command registration. Relevant pull requests for these improvements
to `WP_CLI::add_command()` include [#2373](https://github.com/wp-cli/wp-cli/pull/2373),
[#2389](https://github.com/wp-cli/wp-cli/pull/2389), [#2398](https://github.com/wp-cli/wp-cli/pull/2398),
[#2409](https://github.com/wp-cli/wp-cli/pull/2409), [#2556](https://github.com/wp-cli/wp-cli/pull/2556),
[#2559](https://github.com/wp-cli/wp-cli/pull/2559).

### More, better, easier to find documentation

It’s actually hard to imagine how people got around previously. Here’s what’s changed
in documentationland:

 * The wiki has been reincarnated as the [documentation portal](http://wp-cli.org/docs/)
   on the website. I spent time cleaning up the pages as I moved them over; hopefully
   you find the new [commands cookbook](http://wp-cli.org/docs/commands-cookbook/)
   quite helpful.
 * Internal APIs you can use in your own commands are now [publicly documented](http://wp-cli.org/docs/internal-api/).
   The internal APIAPI An API or Application Programming Interface is a software
   intermediary that allows programs to interact with each other and share data 
   in limited, clearly defined ways. pages are generated from the codebase, which
   should greatly help maintenance efforts.
 * On each command page, there’s a “GithubGitHub GitHub is a website that offers
   online implementation of git repositories that can easily be shared, copied and
   modified by other developers. Public repositories are free to host, private repositories
   require a paid subscription. GitHub introduced the concept of the ‘pull request’
   where code changes done in branches by contributors can be reviewed and discussed
   before being merged by the repository owner. [https://github.com/](https://github.com/)
   issues” link to make it easier to find both open and closed issues for a given
   command. For instance, here are [all of the outstanding issues](https://github.com/wp-cli/wp-cli/issues?q=is%3Aopen+label%3Acommand%3Apackage+sort%3Aupdated-desc)
   for `wp package` and its subcommands. Keep in mind this isn’t necessarily exact,
   because I didn’t go back through and label all issues of all time. This feature
   will become more useful as time goes forward.

Relevant pull requests include [#2454](https://github.com/wp-cli/wp-cli/pull/2454),
[#2487](https://github.com/wp-cli/wp-cli/pull/2487), [#2494](https://github.com/wp-cli/wp-cli/pull/2494),
[#2499](https://github.com/wp-cli/wp-cli/pull/2499), [#2507](https://github.com/wp-cli/wp-cli/pull/2507),
[#2513](https://github.com/wp-cli/wp-cli/pull/2513), [#2515](https://github.com/wp-cli/wp-cli/pull/2515).

### Automatic update checks

For those using WP-CLI as a Phar file, which should be most of you, version 0.23.0
and later will automatically check for updates. If an update is found, you’ll be
prompted to install it.

Automatic update checks even work for those using the nightly build! Use `wp cli
update --nightly` to get back on the nightly track after each major releaseMajor
Release A set of releases or versions having the same major version number may be
collectively referred to as “X.Y” -- for example version 5.2.x to refer to versions
5.2, 5.2.1, and all other versions in the 5.2. (five dot two dot) branch of that
software. Major Releases often are the introduction of new major features and functionality..

By default, the automatic update check will run once a day for users with a _writable_
WP-CLI Phar file. Distribution file or directory not writable? Then the check won’t
run. Automatic update checks are triggered when a user, not a script, runs `wp help
<some-command>`. This frequency can be configured with the `WP_CLI_AUTO_CHECK_UPDATE_DAYS`
environment variable, or disabled entirely with the `WP_CLI_DISABLE_AUTO_CHECK_UPDATE`
environment variable.

Relevant pull requests for this feature includes [#2536](https://github.com/wp-cli/wp-cli/pull/2536)
and [#2538](https://github.com/wp-cli/wp-cli/pull/2538).

### Everything else in 0.23.0

Command improvements:

 * Better performance for `wp (user|post) list --format=count` by only fetching 
   the data we need [[#2370](https://github.com/wp-cli/wp-cli/pull/2370), [#2387](https://github.com/wp-cli/wp-cli/pull/2387)].
 * Prevents dupe builds with Travis default settings in `wp scaffold plugin-tests`[
   [#2377](https://github.com/wp-cli/wp-cli/pull/2377)].
 * Generate comments for a specific post with `wp comment generate --post_id=<post-
   id>` [[#2388](https://github.com/wp-cli/wp-cli/pull/2388)].
 * Cleans up files from the prior version when using `wp core (update|download) --
   force` [[#2382](https://github.com/wp-cli/wp-cli/pull/2382), [#2406](https://github.com/wp-cli/wp-cli/pull/2406),
   [#2413](https://github.com/wp-cli/wp-cli/pull/2413), [#2432](https://github.com/wp-cli/wp-cli/pull/2432)].
 * Adds a timer to individual events in `wp cron event run` [[#2437](https://github.com/wp-cli/wp-cli/pull/2437)].
 * Introduces `wp term meta` for managing term metaMeta Meta is a term that refers
   to the inside workings of a group. For us, this is the team that works on internal
   WordPress sites like WordCamp Central and Make WordPress. [[#2444](https://github.com/wp-cli/wp-cli/pull/2444)].
 * Adds CSV and JSONJSON JSON, or JavaScript Object Notation, is a minimal, readable
   format for structuring data. It is used primarily to transmit data between a 
   server and web application, as an alternative to XML. output format to `wp (theme
   |plugin) update` [[#2452](https://github.com/wp-cli/wp-cli/pull/2452)].
 * Verifies MD5 hash of downloaded archive file with `wp core download` [[#2461](https://github.com/wp-cli/wp-cli/pull/2461)]
 * Entirely avoids loading WordPress in `wp core verify-checksums` [[#2459](https://github.com/wp-cli/wp-cli/pull/2459)].
 * Supports emptying term meta with `wp site empty` [[#2506](https://github.com/wp-cli/wp-cli/pull/2506)].
 * Adds WP REST APIREST API The REST API is an acronym for the RESTful Application
   Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE 
   data. It is how the front end of an application (think “phone app” or “website”)
   can communicate with the data store (think “database” or “file system”) [https://developer.wordpress.org/rest-api/](https://developer.wordpress.org/rest-api/)
   registration args to `scaffold (post-type|taxonomy)` [[#2551](https://github.com/wp-cli/wp-cli/pull/2551)].
 * Adds documentation to `test-sample.php` and `bootstrap.php` when running `wp 
   scaffold plugin-tests` [[#2577](https://github.com/wp-cli/wp-cli/pull/2577), 
   [#2578](https://github.com/wp-cli/wp-cli/pull/2578)].

Framework enhancements:

 * Switches `WP_CLI::confirm()` to automatically lowercase the response, permitting
   use of `Y` or `y` [[#2366](https://github.com/wp-cli/wp-cli/pull/2366)].
 * Adds `(before|after)_wp(_config)_load` hooksHooks In WordPress theme and development,
   hooks are functions that can be applied to an action or a Filter in WordPress.
   Actions are functions performed when a certain event occurs in WordPress. Filters
   allow you to modify certain functions. Arguments used to hook both filters and
   actions look the same. in WP load process, permitting code injected via `--require`
   to make modifications during the bootstrap process [[#2375](https://github.com/wp-cli/wp-cli/pull/2375)].
 * Adds `.editorconfig` to project root based on WordPress Coding StandardsWordPress
   Coding Standards The Accessibility, PHP, JavaScript, CSS, HTML, etc. coding standards
   as published in the WordPress [Coding Standards Handbook](https://developer.wordpress.org/coding-standards/).
   May also refer to [The collection of PHP_CodeSniffer rules](https://github.com/WordPress/WordPress-Coding-Standards/)(
   sniffs) used to format and validate PHP code developed for WordPress according
   to the PHP coding standards. [[#2395](https://github.com/wp-cli/wp-cli/pull/2395)].
 * Encodes `WP_Error` data as JSON in `WP_CLI::error_to_string()` so that the data
   is actually human-readable [[#2397](https://github.com/wp-cli/wp-cli/pull/2397)].
 * Supports custom exit codes in `WP_CLI::error()` [[#2440](https://github.com/wp-cli/wp-cli/pull/2440)].
 * Introduces `--format=yaml` for easily displaying data as YAML [[#2453](https://github.com/wp-cli/wp-cli/pull/2453)].
 * Supports config deep merging and inheritance [[#2496](https://github.com/wp-cli/wp-cli/pull/2496)].
 * Updates Composer dependencies [[#2554](https://github.com/wp-cli/wp-cli/pull/2554)]

Bug fixes across the board:

 * In `bin/install-wp-tests.sh`, don’t cd in `WP_TESTS_DIR` before dowloading and
   setting up `wp-tests-config.php` [[#2371](https://github.com/wp-cli/wp-cli/pull/2371)].
 * When using `--prompt`, now only prompts for the first command in the execution
   thread. Previously, any use of `WP_CLI::run_command()` within a command would
   cause the prompting UXUX UX is an acronym for User Experience - the way the user
   uses the UI. Think ‘what they are doing’ and less about how they do it. to appear
   again [[#2400](https://github.com/wp-cli/wp-cli/pull/2400)].
 * Removes unnecessary `exit` on premature success for `wp theme activate` [[#2412](https://github.com/wp-cli/wp-cli/pull/2412)].
 * Checks if a taxonomyTaxonomy A taxonomy is a way to group things together. In
   WordPress, some common taxonomies are category, link, tag, or post format. [https://codex.wordpress.org/Taxonomies#Default_Taxonomies](https://codex.wordpress.org/Taxonomies#Default_Taxonomies).
   exists before listing its terms [[#2414](https://github.com/wp-cli/wp-cli/pull/2414)].
 * When trying to update a version of coreCore Core is the set of software required
   to run WordPress. The Core Development Team builds WordPress. that doesn’t exist,
   check the HTTPHTTP HTTP is an acronym for Hyper Text Transfer Protocol. HTTP 
   is the underlying protocol used by the World Wide Web and this protocol defines
   how messages are formatted and transmitted, and what actions Web servers and 
   browsers should take in response to various commands. response code before trying
   to unzip an invalid archive [[#2368](https://github.com/wp-cli/wp-cli/pull/2368)].
 * Fixes use of `wp server` when the PHPPHP PHP (recursive acronym for PHP: Hypertext
   Preprocessor) is a widely-used open source general-purpose scripting language
   that is especially suited for web development and can be embedded into HTML. 
   [https://www.php.net/manual/en/index.php](https://www.php.net/manual/en/index.php)
   binary contains spaces [[#2422](https://github.com/wp-cli/wp-cli/pull/2422)].
 * Respects `--skip_comments` flag for `wp export`, which has been broken for quite
   a while [[#2427](https://github.com/wp-cli/wp-cli/pull/2427)]
 * Persists IPTC data in `wp media import` when missing a title or caption; removes
   extension from default title [[#2438](https://github.com/wp-cli/wp-cli/pull/2438),
   [#2466](https://github.com/wp-cli/wp-cli/pull/2466)].
 * Disables check translation updates when updating themes or plugins [[#2439](https://github.com/wp-cli/wp-cli/pull/2439)].
 * Corrects parameter sequence order when creating a new user on multisiteMultisite
   Multisite is a WordPress feature which allows users to create a network of sites
   on a single WordPress installation. Available since WordPress version 3.0, Multisite
   is a continuation of WPMU or WordPress Multiuser project. WordPress MultiUser
   project was discontinued and its features were included into WordPress core. 
   [Advanced Administration Handbook -> Create A Network.](https://developer.wordpress.org/advanced-administration/multisite/create-network/)[
   [#2443](https://github.com/wp-cli/wp-cli/pull/2443)].
 * Disables automatic colorization when `--format=table` [[#2458](https://github.com/wp-cli/wp-cli/pull/2458)].
 * Uses core’s version check API for finding updates, which gives us exact URLs 
   to download offers [[#2469](https://github.com/wp-cli/wp-cli/pull/2469)].
 * Uses more robust failed download checking in `wp cli update` [[#2488](https://github.com/wp-cli/wp-cli/pull/2488)].
 * Runs help early for `wp core` commands used when core isn’t yet installed [[#2497](https://github.com/wp-cli/wp-cli/pull/2497)].
 * Fixes formatting of GLOBAL PARAMETERS when command has subcommands [[#2516](https://github.com/wp-cli/wp-cli/pull/2516)].
 * Properly handles multi-column keys in `wp search-replace` [[#2531](https://github.com/wp-cli/wp-cli/pull/2531)].
 * Uses correct path to autoloader when WP-CLI is installed to a parent Composer
   project [[#2550](https://github.com/wp-cli/wp-cli/pull/2550)].
 * Properly passes `wp plugin search` fields to `plugins_api()` request; adds `page`
   parameter [[#2570](https://github.com/wp-cli/wp-cli/pull/2570), [#2571](https://github.com/wp-cli/wp-cli/pull/2571)].
 * Add `parent` as a potential status in `wp theme status` [[#2573](https://github.com/wp-cli/wp-cli/pull/2573)]

Contributors to this release: [anantshri](https://github.com/anantshri), [danielbachhuber](https://github.com/danielbachhuber),
[edueo](https://github.com/edueo), [GaryJones](https://github.com/GaryJones), [gilbitron](https://github.com/gilbitron),
[hina](https://github.com/hina), [hinoue-work](https://github.com/hinoue-work), 
[jacobischwartz](https://github.com/jacobischwartz), [marco-c](https://github.com/marco-c),
[markjaquith](https://github.com/markjaquith), [markkimsal](https://github.com/markkimsal),
[mbovel](https://github.com/mbovel), [ottok](https://github.com/ottok), [rodrigoprimo](https://github.com/rodrigoprimo),
[sourcerer-mike](https://github.com/sourcerer-mike), [staude](https://github.com/staude),
[szepeviktor](https://github.com/szepeviktor), [za-creature](https://github.com/za-creature)

You can browse the full list of [resolved issues](https://github.com/wp-cli/wp-cli/issues?q=milestone%3A0.23.0+is%3Aclosed)
on Github.

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcli%2F2016%2F03%2F22%2Fversion-0-23-0%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/danielbachhuber/) [Daniel Bachhuber](https://profiles.wordpress.org/danielbachhuber/)
12:00 am _on_ February 4, 2016      

# 󠀁[RESTful WP-CLI – No rest for the weary](https://make.wordpress.org/cli/2016/02/04/restful-wp-cli-update-2/)󠁿

Like my title? Get the pun? Te he he.

I’m just back from [A Day of REST](https://feelingrestful.com/), where I spoke about
[a more RESTful WP-CLI](https://make.wordpress.org/restful/?output_format=md), and
unlocking the potential of the WP REST APIREST API The REST API is an acronym for
the RESTful Application Program Interface (API) that uses HTTP requests to GET, 
PUT, POST and DELETE data. It is how the front end of an application (think “phone
app” or “website”) can communicate with the data store (think “database” or “file
system”) [https://developer.wordpress.org/rest-api/](https://developer.wordpress.org/rest-api/)
at the command line. It was probably the best talk I’ve ever done. You can [check out my annotated slides](http://blog.handbuilt.co/2016/01/28/feelingrestful-a-more-restful-wp-cli/)
if you haven’t already.

The talk covered the progress I’ve already made, and the hypotheticals on my mind
every day when I go for a swim.

### wp-rest-cli v0.1.0

Today marks v0.1.0 for [wp-rest-cli](https://github.com/danielbachhuber/wp-rest-cli).
This initial release makes WP REST API endpoints available as WP-CLIWP-CLI WP-CLI
is the Command Line Interface for WordPress, used to do administrative and development
tasks in a programmatic way. The project page is [http://wp-cli.org/](http://wp-cli.org/)
[https://make.wordpress.org/cli/](https://make.wordpress.org/cli/) commands. It 
does so by:

 * Auto-discovering endpoints from any WordPress site running WordPress 4.4 or higher.
 * Registering WP-CLI commands for the endpoints it understands.

**Warning:** This project is at a very early stage. Treat it as an experiment, and
understand that breaking changes will be made without warning. The sky may also 
fall on your head.

Here’s how it works:

    ```
    $ wp rest
    usage: wp rest attachment <command>
       or: wp rest category <command>
       or: wp rest comment <command>
       or: wp rest meta <command>
       or: wp rest page <command>
       or: wp rest pages-revision <command>
       or: wp rest post <command>
       or: wp rest posts-revision <command>
       or: wp rest status <command>
       or: wp rest tag <command>
       or: wp rest taxonomy <command>
       or: wp rest type <command>
       or: wp rest user <command>

    $ wp --http=demo.wp-api.org rest tag get 65 --format=json
    {
      "id": 65,
      "link": "http://demo.wp-api.org/tag/dolor-in-sunt-placeat-molestiae-ipsam/",
      "name": "Dolor in sunt placeat molestiae ipsam",
      "slug": "dolor-in-sunt-placeat-molestiae-ipsam",
      "taxonomy": "post_tag"
    }
    ```

Notice how you can use `--http=<domain>` to interact with a remote WordPress site.`--
http=<domain>` must be supplied as the second argument to be used. Without it, wp-
rest-cli will look for endpoints of a WordPress site in a directory specified by`--
path=<path>` (or the current directory, if `--path=<path` isn’t supplied).

Using wp-rest-cli requires the latest nightly build of WP-CLI, which you can install
with `wp cli update --nightly`. Once you’ve done so, you can install wp-rest-cli
with `wp package install danielbachhuber/wp-rest-cli`.

### Unreleased WP-CLI improvements

Wait, `wp package install`. What in the?

That’s right, WP-CLI now has package management. Using `wp cli update --nightly`,
you now can:

 * `wp package browse` to browse [packages available for installation](http://wp-cli.org/package-index/).
 * `wp package install` to install a given package.
 * `wp package list` to list packages installed locally.
 * `wp package uninstall` to uninstall a given package.

While I wasn’t _planning_ to dive down this rabbit hole during the Kickstarter project,
I was finally inspired on how to finish the feature, and took a couple hours yesterday
to do so. It’s amazing how you can be mentally blocked on a problem for literally
two years but then, once you’re unblocked, finish it up in a short period of time.

You’ll probably run into one or more bugs with `wp package`. When you do, please
[let me know on this issue](https://github.com/wp-cli/wp-cli/issues/1564). If the
bugs get too hairy, I may pull the feature from the release and revisit. But, for
now, you can much more easily install and use community packages.

wp-rest-cli also makes use of another new feature: register arbitrary functions,
closures, and class methods as WP-CLI commands.

For instance, given a closure `$hook_command`:

    ```
    $hook_command = function( $args, $assoc_args ) {
        // the meat of the command
    };
    WP_CLI::add_command( 'hook', $hook_command, array(
        'shortdesc' => 'List callbacks registered to a given action or filter.',
        'synopsis' => array(
            array(
                'name'        => 'hook',
                'type'        => 'positional',
                'description' => 'The key for the action or filter.',
            ),
            array(
                'name'        => 'format',
                'type'        => 'assoc',
                'description' => 'List callbacks as a table, JSON, or CSV. Default: table.',
                'optional'    => true,
            ),
        ),
    ) );
    ```

Then, when you run `wp hook init`, you’ll see:

    ```
    $ wp hook init
    +---------------------------------+----------+---------------+
    | function                        | priority | accepted_args |
    +---------------------------------+----------+---------------+
    | create_initial_post_types       | 0        | 1             |
    | create_initial_taxonomies       | 0        | 1             |
    | wp_widgets_init                 | 1        | 1             |
    | smilies_init                    | 5        | 1             |
    | wp_cron                         | 10       | 1             |
    | _show_post_preview              | 10       | 1             |
    | rest_api_init                   | 10       | 1             |
    | kses_init                       | 10       | 1             |
    | wp_schedule_update_checks       | 10       | 1             |
    | ms_subdomain_constants          | 10       | 1             |
    | maybe_add_existing_user_to_blog | 10       | 1             |
    | check_theme_switched            | 99       | 1             |
    +---------------------------------+----------+---------------+
    ```

Want to use this command locally? Update to the nightly, and then run `wp package
install danielbachhuber/wp-hook-command`.

### What’s next

Well… I’ve spent a ton of hours over the last month on the WP REST API. 67.03 hours
of 83 budgeted, to be precise. Given there doesn’t yet seem to be an end in sight,
I may reallocate ~30 hours or so out of the WP-CLI budget for continued involvement
with the WP REST API. But, I do need to slow down the pace of my involvement a bit,
because it’s not sustainable.

On the wp-rest-cli front, the product problems at the top of my mind are authentication
and aliases.

Instead of:

    ```
    wp --http=demo.wp-api.org --user=daniel:daniel rest tag create
    ```

I’d much prefer:

    ```
    wp @wpapi tag create
    ```

In the example preceeding, `@wpapi` is an alias for both the target and authentication.

In this hypothetical universe, aliases would also be injected into the WP-CLI runtime:

    ```
    $ wp @wpapi
    usage: wp @wpapi attachment <command>
       or: wp @wpapi category <command>
       or: wp @wpapi comment <command>
       or: wp @wpapi meta <command>
       or: wp @wpapi page <command>
       or: wp @wpapi pages-revision <command>
       or: wp @wpapi post <command>
       or: wp @wpapi posts-revision <command>
       or: wp @wpapi status <command>
       or: wp @wpapi tag <command>
       or: wp @wpapi taxonomy <command>
       or: wp @wpapi type <command>
       or: wp @wpapi user <command>
    ```

There’s a bit of thinking to do, and code to write, to get from here to there, though.

Feeling inspired? I want to hear from you! Particularly if you’ve written custom
endpoints I can test against. Please [open a Github issue](https://github.com/danielbachhuber/wp-rest-cli/issues)
with questions, feedback, and violent dissent, or [email me directly](https://make.wordpress.org/cli/page/13/daniel@handbuilt.co?output_format=md).

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcli%2F2016%2F02%2F04%2Frestful-wp-cli-update-2%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/danielbachhuber/) [Daniel Bachhuber](https://profiles.wordpress.org/danielbachhuber/)
12:00 am _on_ January 12, 2016      

# 󠀁[RESTful WP-CLI – The journey begins](https://make.wordpress.org/cli/2016/01/12/restful-wp-cli-update-1/)󠁿

And so the journey begins. As with most journeys, I have a mixture of emotions: 
excitement, anticipation, trepidation, and eagerness. Although the destination may
be far away, I know I can get there as long as I consistently take steps in the 
right direction.

Today marks the formal kickoff of my Kickstarter project, “[A more RESTFul WP-CLI](https://www.kickstarter.com/projects/danielbachhuber/a-more-restful-wp-cli/description)“.
To celebrate the occasion, I’ve [launched a project page](https://make.wordpress.org/restful/?output_format=md)
to capture high-level goals and document my progress along the journey. I’ll keep
it updated as I write blog posts every couple or few weeks. Consider these blog 
posts both a development log and an invitation to participate — I look forward to
your comments, issues and pull requests.

---

For the past month or so, the question at the top of my mind has been: what does
it mean to “unlock the potential of the WP REST APIREST API The REST API is an acronym
for the RESTful Application Program Interface (API) that uses HTTP requests to GET,
PUT, POST and DELETE data. It is how the front end of an application (think “phone
app” or “website”) can communicate with the data store (think “database” or “file
system”) [https://developer.wordpress.org/rest-api/](https://developer.wordpress.org/rest-api/)
at the command line”? Or, even more broadly, why do this project?

These are big questions, and I consider myself fortunate to be able to explore them
over the next six months or so. Here’s how I’ve unpacked them so far, in a series
of loosely connected ideas:

 * WP-CLIWP-CLI WP-CLI is the Command Line Interface for WordPress, used to do administrative
   and development tasks in a programmatic way. The project page is [http://wp-cli.org/](http://wp-cli.org/)
   [https://make.wordpress.org/cli/](https://make.wordpress.org/cli/)’s goal is 
   to be, quantitatively, the _fastest_ interface for developers to manage WordPress.
   For anything you want to do with WordPress, using WP-CLI should save you multitudes
   of time over doing it some other way.
 * WP-CLI and WP REST API both offer CRUD interfaces to WordPress resources. `wp
   post list` is more or less `GET /wp/v2/posts`. But, `wp widget list` doesn’t 
   yet have an equivalent in WP REST API. We still have a ton of work to do.
 * Building the WP REST API has been, and will continue to be, an exercise of modeling
   how WordPress works to a consistent (RESTful) interface. Furthermore, this model
   is declared in a common language for clients to interpret.
 * At some point in the future, WP-CLI will be able to ditch a substantial amount
   of its internals when it can use the WP REST API as its interface to WordPress.
   WP-CLI can continue to serve as the fastest way for developers to manage WordPress,
   offering higher-level metaMeta Meta is a term that refers to the inside workings
   of a group. For us, this is the team that works on internal WordPress sites like
   WordCamp Central and Make WordPress. operations like `generate`, `(push|pull)`,
   and `clone` in addition to being a seamless command line interface to WordPress
   internals.
 * As WordPress developers write new endpoints for the WP REST API, it will be quite
   powerful to have those endpoints instantly accessible through the command line,
   and as accessible as coreCore Core is the set of software required to run WordPress.
   The Core Development Team builds WordPress. resources. For instance, where WP-
   CLI currently has the `wp post *` commands, WP-CLI requires Easy Digital Downloads
   to produce its own `wp edd *` commands.
 * It appears to be supremely possible to deliver this project as a series of improvements
   to WP-CLI, shipped over one or more versions in the next couple of quarters.

Lots of threads to pull on.

---

I’m starting development by working towards making `wp tag list` work interchangably
with local and remote sites. Doing so already raises a few issues:

 * WP-CLI needs to be easier to register commands on the fly. In my prototype, I
   had to `eval()` a [dynamically generated class](https://github.com/danielbachhuber/wp-rest-cli/commit/f5ec393632fe841aaaecfc664c419ed1bdbcc566#diff-6bd9ca08588aaa4472208db14aae6750R112).
   It would be much nicer to be able to [register an arbitrary function, closure, or method](https://github.com/wp-cli/wp-cli/issues/2204)
   as a WP-CLI command.
 * When we register REST endpoints to WP-CLI on the fly, there’s the potential for
   them to conflict with existing commands. Furthermore, the endpoints will vary
   from site to site. Ideally, the commands you see should represent the commands
   available on the target site. I think [site aliases](https://github.com/wp-cli/wp-cli/issues/2039)
   may offer us a backwards-compatible implementation; for instance, specifying 
   an alias like `wp @prod` would only expose commands available on production.
 * Remote calls will need authentication. Ideally, it should be possible to authenticate
   once through a supported protocol (basic, oAuth1, APIAPI An API or Application
   Programming Interface is a software intermediary that allows programs to interact
   with each other and share data in limited, clearly defined ways. key, etc.), 
   and store these authentication details somewhere on the file server. This is 
   potential rationale for a [config management command](https://github.com/wp-cli/wp-cli/issues/515).
   If you aren’t blocking web requests to `wp-cli.yml` and `wp-cli.local.yml` already,
   you should be.

---

This project is made possible thanks to the backing of many generous organizations
and individuals. Thank you again for supporting me on this journey.

### Platinum

  |   [](https://pressed.net/)  |  
 |   [Pressed](https://www.pressed.net/) offers white-label, fully managed, WordPress hosting, built on Amazon’s cloud infrastructure. Launch your own managed WordPress hosting brand and let us handle all the maintenance, updates, customer support and billing while building a new recurring revenue stream for your business.  |

### Gold

  |  [](https://chrislema.com/) |  [](https://hmn.md/) |  
   |  [Chris Lema](https://chrislema.com/) is the CTO & Chief Strategist at Crowd Favorite. He’s also a WordPress evangelist, public speaker & advisor to product companies. |  [Human Made](https://hmn.md/) is a leading WordPress Development, Hosting and Consultancy Firm with a global team covering Europe, The USA, and Asia/Australia. |

  |  [](https://pagely.com) |  [](https://pantheon.io) |  
   |  [Pagely®](https://pagely.com) is the World’s first and most scalable WordPress Hosting platform: We help the biggest brands scale and secure WordPress. |  [Pantheon](https://pantheon.io) is a website management platform used to build, launch, and run awesome Drupal & WordPress websites. |

### Silver

  |  [](https://www.godaddy.com/pro) |  [](http://madewithlove.be/) |  [](https://jetpack.me/) |  
 |  [](https://roots.io/) |  [](https://siteground.com) |  [](http://themeisle.com) |  
 |  [](https://wpengine.com) |  [](http://versionpress.net) |  [](https://yoast.com/) |

### Individual

Aaron Jorbin, Aki Björklund, Anu Gupta, Bjørn Ensover Johansen, Brian Krogsgard,
Bronson Quick, Chuck Reynolds, Corey McKrill, Daniel Hüsken, Dave McDonald, Dave
Wardle, Eli Silverman, Felix Arntz, Howard Jacobson, Japh Thomson, Jason Resnick,
Jeremy Felt, Justin Kopepasah, Kailey Lampert, Kevin Cristiano, Max Cutler, Mike
Little, Mike Waggoner, Nate Wright, Pippin Williamson, Quasel, Ralf Hortt, Richard
Aber, Richard Wiggins, Ryan Duff, Scott Kingsley Clark, Shinichi Nishikawa, Sven
Hofmann, Takayuki Miyauchi, Tom McFarlin, rtCamp

---

Let’s go!

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcli%2F2016%2F01%2F12%2Frestful-wp-cli-update-1%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/danielbachhuber/) [Daniel Bachhuber](https://profiles.wordpress.org/danielbachhuber/)
12:00 am _on_ January 7, 2016      

# 󠀁[Version 0.22.0 released](https://make.wordpress.org/cli/2016/01/07/version-0-22-0/)󠁿

Happy 2016! I thought you might enjoy a new WP-CLIWP-CLI WP-CLI is the Command Line
Interface for WordPress, used to do administrative and development tasks in a programmatic
way. The project page is [http://wp-cli.org/](http://wp-cli.org/) [https://make.wordpress.org/cli/](https://make.wordpress.org/cli/)
release before I dive into the RESTful CLICLI Command Line Interface. Terminal (
Bash) in Mac, Command Prompt in Windows, or WP-CLI for WordPress. project.

Use `wp cli update` to install v0.22.0, representing [137 resolved issues and pull requests](https://github.com/wp-cli/wp-cli/issues?q=milestone%3A0.22.0+is%3Aclosed).
Here’s what’s new.

### search-replace for love and profit

Last month, [Pantheon](https://pantheon.io/) generously sponsored 15 hours of my
time to address some of the long-standing bugs in the backlog, and make a few substantial
enhancements too.

Let’s start with the good stuff:

 * Performance boost! Instead of running a MYSQLMySQL MySQL is a relational database
   management system. A database is a structured collection of data where content,
   configuration and other options are stored. [https://www.mysql.com](https://www.mysql.com/)
   LIKE statement every 1000 rows, WP-CLI now just runs it once [[#2304](https://github.com/wp-cli/wp-cli/pull/2304)].
   On a post metaMeta Meta is a term that refers to the inside workings of a group.
   For us, this is the team that works on internal WordPress sites like WordCamp
   Central and Make WordPress. table of ~3.5 million rows where 75,610 rows were
   affected, this change improved execution time from 734.926s to 225.509s (3.3x
   faster).
 * Use the `--export=<filename>` argument to create a SQL file of your transformed
   data, instead of making updates to the database [[#2254](https://github.com/wp-cli/wp-cli/pull/2254)].
   This is a helpful feature when you want to prepare a database for a new environment
   without having to import and then run search-replace.
 * Wildcards can be used in table names [[#2233](https://github.com/wp-cli/wp-cli/pull/2233)].
   search-replace against just meta tables with `wp search-replace <old-string> 
   <new-string> '*meta*'`. Note: the pattern needs to be quoted, as `*` is a special
   character in Bash.

I also landed a number of search-replace bug fixes and minor enhancements:

 * Recurses objects by default when replacing inside of serialized data [[#2222](https://github.com/wp-cli/wp-cli/pull/2222)].
   Among other things, this ensures theme mods are transformed as expected. You 
   can disable the behavior with `--no-recurse-objects`. But, if you do disable 
   the behavior, I’d like to hear from you. I think this is an unnecessary option
   we could remove at a later date.
 * Properly escapes quotes used in search or replace strings [[#2230](https://github.com/wp-cli/wp-cli/pull/2230)].
 * Lets users know to flush their persistent object cache after a search-replace
   procedure is performed [[#2236](https://github.com/wp-cli/wp-cli/pull/2236)].
 * Bails early when the replacement string is the same as the search string [[#2235](https://github.com/wp-cli/wp-cli/pull/2235)].
 * Indicates execution time when running search/replace with `--verbose` [[#2242](https://github.com/wp-cli/wp-cli/pull/2242)].
 * Prevents unnecessary calls to `$wpdb->update()` when there are no replacements
   to be made [[#2245](https://github.com/wp-cli/wp-cli/pull/2245)].
 * Drops unnecessary `REGEXP` query when in regex mode [[#2305](https://github.com/wp-cli/wp-cli/pull/2305)].

### Changes to supported versions

WP-CLI’s minimum supported WordPress version is now 3.7 [[#2261](https://github.com/wp-cli/wp-cli/pull/2261)].

We also officially support PHPPHP PHP (recursive acronym for PHP: Hypertext Preprocessor)
is a widely-used open source general-purpose scripting language that is especially
suited for web development and can be embedded into HTML. [https://www.php.net/manual/en/index.php](https://www.php.net/manual/en/index.php)
7 [[#2330](https://github.com/wp-cli/wp-cli/pull/2330)].

### Everything else in v0.22.0

Improvements to `wp scaffold (plugin|plugin-tests)`:

 * Makes Travis less noisy by only sending email notifications on the initial build
   failure for a branch [[#2194](https://github.com/wp-cli/wp-cli/pull/2194)].
 * PluginPlugin A plugin is a piece of software containing a group of functions 
   that can be added to a WordPress website. They can extend functionality or add
   new features to your WordPress websites. WordPress plugins are written in the
   PHP programming language and integrate seamlessly with WordPress. These can be
   free in the WordPress.org Plugin Directory [https://wordpress.org/plugins/](https://wordpress.org/plugins/)
   or can be cost-based plugin from a third-party. headerHeader The header of your
   site is typically the first thing people will experience. The masthead or header
   art located across the top of your page is part of the look and feel of your 
   website. It can influence a visitor’s opinion about your content and you/ your
   organization’s brand. It may also look different on different screen sizes. follows
   WordPress’ PHPDoc standards [[#2197](https://github.com/wp-cli/wp-cli/pull/2197)].
 * Adds `.dist` extension to PHPUnit config file to permit overriding with a local
   config file [[#2247](https://github.com/wp-cli/wp-cli/pull/2247)]
 * Parses `readme.txt` to find WordPress versions to use as Travis tested versions[
   [#2255](https://github.com/wp-cli/wp-cli/pull/2255)].
 * Includes a default `.gitignore` [[#2297](https://github.com/wp-cli/wp-cli/pull/2297)].

New flags for existing commands:

 * `wp core update --minor` to only perform minor updates [[#2256](https://github.com/wp-cli/wp-cli/pull/2256)].
 * `wp (post|comment|user) meta delete <id> --all` to delete all meta values on 
   a given object [[#2265](https://github.com/wp-cli/wp-cli/pull/2265)].
 * `wp core update-db --dry-run` to see whether a database needs an upgrade [[#2293](https://github.com/wp-cli/wp-cli/pull/2293)].
 * `wp media regenerate --only-missing` for faster performance on sites with lots
   of images where only a small number are missing sizes [[#2292](https://github.com/wp-cli/wp-cli/pull/2292)].
 * `wp cron event run --all` to execute all registered cron events [[#2323](https://github.com/wp-cli/wp-cli/pull/2323)].
 * `wp site empty --uploads` to empty a site and delete its uploads directory too[
   [#2339](https://github.com/wp-cli/wp-cli/pull/2339)].
 * `wp core install --skip-email` to install without email notifications [[#2345](https://github.com/wp-cli/wp-cli/pull/2345)].
 * `wp transient (get|set|delete) --network` to manage site transients [[#2351](https://github.com/wp-cli/wp-cli/pull/2351)].

Framework enhancements:

 * Introduces `wp_version_compare()` when comparing WordPress versions [[#2237](https://github.com/wp-cli/wp-cli/pull/2237)].
   SVNSVN Apache Subversion (often abbreviated SVN, after its command name svn) 
   is a software versioning and revision control system. Software developers use
   Subversion to maintain current and historical versions of files such as source
   code, web pages, and documentation. Its goal is to be a mostly compatible successor
   to the widely used Concurrent Versions System (CVS). WordPress core and the wordpress.
   org released code are all centrally managed through SVN. https://subversion.apache.
   org/. and GitGit Git is a free and open source distributed version control system
   designed to handle everything from small to very large projects with speed and
   efficiency. Git is easy to learn and has a tiny footprint with lightning fast
   performance. Most modern plugin and theme development is being done with this
   version control system. [https://git-scm.com/](https://git-scm.com/) tags include`-
   src` in `$wp_version`, which
    `version_compare()` doesn’t like.
 * Defers to the `$PAGER` environment variable when set [[#2264](https://github.com/wp-cli/wp-cli/pull/2264)].
 * Introduces a `composer.lock` file to the project, to fix dependencies to specific
   hashes [[#2280](https://github.com/wp-cli/wp-cli/pull/2280)].
 * Magically globalizes any new variables defined in wp-config.php, as they’re expected
   to be global [[#2318](https://github.com/wp-cli/wp-cli/pull/2318)].
 * If a `--require=<file>` is missing, specifies the context of where the missing
   file is referenced for easier debugging [[#2336](https://github.com/wp-cli/wp-cli/pull/2336)].
 * Use `mustangostang/spyc` instead of bundling our own copy [[#2350](https://github.com/wp-cli/wp-cli/pull/2350)].
   The `Spyc` class is still available in the global namespace.
 * Introduces `WP_CLIUtilsget_temp_dir()` for safer temp directories [[#2353](https://github.com/wp-cli/wp-cli/pull/2353)].

Improvements to other commands:

 * Includes `not_found` label when scaffolding a custom taxonomyTaxonomy A taxonomy
   is a way to group things together. In WordPress, some common taxonomies are category,
   link, tag, or post format. [https://codex.wordpress.org/Taxonomies#Default_Taxonomies](https://codex.wordpress.org/Taxonomies#Default_Taxonomies).[
   [#2196](https://github.com/wp-cli/wp-cli/pull/2196)].
 * Permits installing remote plugin files without `.zip` in filename [[#2193](https://github.com/wp-cli/wp-cli/pull/2193)].
 * Warns when adding a user as a super admin when the user is already a super admin[
   [#2202](https://github.com/wp-cli/wp-cli/pull/2202)].
 * Uses `WP_CLI::log()` instead of `WP_CLI::line()` in `wp import`, so `--quiet`
   flag is respected [[#2234](https://github.com/wp-cli/wp-cli/pull/2234)].
 * Adds support to `wp db tables` for wildcard tables (e.g. `*meta*`), `--all-tables-
   with-prefix`, and `--format=csv` [[#2250](https://github.com/wp-cli/wp-cli/pull/2250)].
 * Improves error message when installing a plugin or theme and the resource isn’t
   found [[#2253](https://github.com/wp-cli/wp-cli/pull/2253),[#2267](https://github.com/wp-cli/wp-cli/pull/2267)].
 * Supports custom `wp export` filename formats with `--filename_format=<format>`[
   [#2230](https://github.com/wp-cli/wp-cli/pull/2300)]
 * Assumes db errors during `wp install` to be installation failures, and reports
   accordingly [[#2337](https://github.com/wp-cli/wp-cli/pull/2337)].
 * Exposes plugin header details at runtime for `wp scaffold plugin` [[#2338](https://github.com/wp-cli/wp-cli/pull/2338)].
 * Includes `ci/behat-tags.php` in `wp scaffold package-tests` [[#2342](https://github.com/wp-cli/wp-cli/pull/2342)].

Bug fixes across the board:

 * Lets `help` run early when WP is detected, but not installed (e.g. `wp core config--
   help`) [[#2190](https://github.com/wp-cli/wp-cli/pull/2190)]. Bug was introduced
   in v0.20.0.
 * When scaffolding a child themeChild theme A Child Theme is a customized theme
   based upon a Parent Theme. It’s considered best practice to create a child theme
   if you want to modify the CSS of your theme. [https://developer.wordpress.org/themes/advanced-topics/child-themes/](https://developer.wordpress.org/themes/advanced-topics/child-themes/),
   creates a safe version of the parent theme slug for the child enqueue function[
   [#2203](https://github.com/wp-cli/wp-cli/pull/2203)]. Previously, if the parent
   slug included dashes, an invalid enqueue function would be scaffolded.
 * Suppresses error notices when looking for `wp-config.php` and PHP’s `open_basedir`
   is in effect [[#2211](https://github.com/wp-cli/wp-cli/pull/2211)].
 * Fixes error notice in `WP_CLILoggersQuiet` [[#2210](https://github.com/wp-cli/wp-cli/pull/2210)].
 * Fixes `all_items` label in custom post typeCustom Post Type WordPress can hold
   and display many different types of content. A single item of such a content 
   is generally called a post, although post is also a specific post type. Custom
   Post Types gives your site the ability to have templated posts, to simplify the
   concept. scaffolding [[#2213](https://github.com/wp-cli/wp-cli/pull/2213)].
 * Ensures `install-package-tests.sh` actually downloads the nightly WP-CLI Phar
   build, and not a redirect [[#2214](https://github.com/wp-cli/wp-cli/pull/2214)].
 * Sets the `upload_space_check_disabled` to `1` when installing multisiteMultisite
   Multisite is a WordPress feature which allows users to create a network of sites
   on a single WordPress installation. Available since WordPress version 3.0, Multisite
   is a continuation of WPMU or WordPress Multiuser project. WordPress MultiUser
   project was discontinued and its features were included into WordPress core. 
   [Advanced Administration Handbook -> Create A Network.](https://developer.wordpress.org/advanced-administration/multisite/create-network/)[
   [#2238](https://github.com/wp-cli/wp-cli/pull/2238)]. This mirrors coreCore Core
   is the set of software required to run WordPress. The Core Development Team builds
   WordPress.’s behavior on new installs.
 * Provides a more helpful message when image regeneration fails [[#2239](https://github.com/wp-cli/wp-cli/pull/2239)].
 * Properly updates menu sub-item parent when parent is deleted [[#2262](https://github.com/wp-cli/wp-cli/pull/2262)].
 * Stops prefixing rewrite rules with `index.php` when using `wp rewrite structure`[
   [#2279](https://github.com/wp-cli/wp-cli/pull/2279)].
 * Fixes typo in `wp transient set` synopsis [[#2282](https://github.com/wp-cli/wp-cli/pull/2282)].
 * Restores `wp core verify-checksums` for non-US English locales [[#2287](https://github.com/wp-cli/wp-cli/pull/2287)].
   Bug was introduced in v0.21.0.
 * Switches to the readline library, when available, for better support of arrow
   keys using `--prompt` [[#2325](https://github.com/wp-cli/wp-cli/pull/2325)].
 * `WP_CLIFormatter` properly checks for null values on objects [[#2322](https://github.com/wp-cli/wp-cli/pull/2322)].
 * In `wp media import`, uses host instead of scheme to determine whether a file
   is remote or local, for Windows compatibility [[#2324](https://github.com/wp-cli/wp-cli/pull/2324)].
 * Ensures updating a plugin with an invalid `--version=<version>` specified doesn’t
   delete the plugin [[#2346](https://github.com/wp-cli/wp-cli/pull/2346)].

Contributors to this release: [2ndkauboy](https://github.com/2ndkauboy), [coreyworrell](https://github.com/coreyworrell),
[danielbachhuber](https://github.com/danielbachhuber), [davidleach](https://github.com/davidleach),
[duncanjbrown](https://github.com/duncanjbrown), [ernilambar](https://github.com/ernilambar),
[fjarrett](https://github.com/fjarrett), [gilbitron](https://github.com/gilbitron),
[greg-1-anderson](https://github.com/greg-1-anderson), [iandunn](https://github.com/iandunn),
[jjeaton](https://github.com/jjeaton), [modelm](https://github.com/modelm), [rodrigoprimo](https://github.com/rodrigoprimo),
[ryanshoover](https://github.com/ryanshoover), [stevector](https://github.com/stevector),
[szepeviktor](https://github.com/szepeviktor), [tristanpenman](https://github.com/tristanpenman),
[x1024](https://github.com/x1024)

You can browse the full list of [resolved issues](https://github.com/wp-cli/wp-cli/issues?q=milestone%3A0.22.0+is%3Aclosed)
on GithubGitHub GitHub is a website that offers online implementation of git repositories
that can easily be shared, copied and modified by other developers. Public repositories
are free to host, private repositories require a paid subscription. GitHub introduced
the concept of the ‘pull request’ where code changes done in branches by contributors
can be reviewed and discussed before being merged by the repository owner. [https://github.com/](https://github.com/).

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcli%2F2016%2F01%2F07%2Fversion-0-22-0%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/danielbachhuber/) [Daniel Bachhuber](https://profiles.wordpress.org/danielbachhuber/)
12:00 am _on_ December 1, 2015      

# 󠀁[What the survey said, 2015 edition](https://make.wordpress.org/cli/2015/12/01/survey-results-2015/)󠁿

Many thanks to the 206 (!!!) people who took our [second user survey](http://wp-cli.org/blog/user-survey-2015.html).
We appreciate your time in helping us to understand how WP-CLIWP-CLI WP-CLI is the
Command Line Interface for WordPress, used to do administrative and development 
tasks in a programmatic way. The project page is [http://wp-cli.org/](http://wp-cli.org/)
[https://make.wordpress.org/cli/](https://make.wordpress.org/cli/) is being adopted
by the community.

Curious as to how the numbers have changed? Take a look at the [summary of the first user survey](http://wp-cli.org/blog/survey-results.html)
from April 2014.

### By the numbers

**85% of respondents use WP-CLI regularly**

Of this 85%, 48% use WP-CLI multiple times per day. 37% use it a couple or few times
per week. Only 15% of respondents use WP-CLI infrequently or rarely.

94% of respondents use WP-CLI interactively at the command line, 66% have incorporated
it into bash scripts, and 23% are using WP-CLI with Puppet, Chef, or another provisioning
system. Other tools mentioned include: [Capistrano](http://capistranorb.com/), [Codeception](http://codeception.com/),
[EasyEngine](https://easyengine.io/), [Fabric](http://www.fabfile.org/), [Grunt](http://gruntjs.com/),
and [SaltStack](http://saltstack.com/).

**Most users keep WP-CLI up to date**

Over 70% of respondents keep WP-CLI up to date. Here’s how the numbers break down:

 * 13% run the latest alpha. You can too with `wp cli update --nightly`.
 * 58% use the latest stable release (v0.20.x at time of survey).
 * 24% are using one or two versions below the latest stable. Only 5% use a very
   old version of WP-CLI.

Good news — if you’re writing custom commands, you can reasonably assume it’s safe
to use the latest features in WP-CLI.

**WP-CLI is used for an increasing variety of tasks**

Like last year, the survey included “What do you use WP-CLI for?” as a free-form
field. To produce a statistical summary, I tagged each response with keywords. Of
170 interpreted values:

 * 38% (65) use WP-CLI for updating WordPress coreCore Core is the set of software
   required to run WordPress. The Core Development Team builds WordPress., themes,
   or plugins.
 * 22% (38) transform their database in some way using `wp search-replace`.
 * 17% (29) rely upon WP-CLI when performing migrations.
 * 15% (26) make use of WP-CLI’s database management features: `wp db export`, `
   wp db import` and `wp db optimize`.
 * 11% (18) depend upon WP-CLI in provisioning scripts.
 * 10% (17) scaffold new themes and plugins with `wp scaffold`.
 * 9% (16) write custom commands for their own needs.
 * 6% (10) generate mock posts, users and comments.
 * 3% (5) are hearty souls who use `wp shell`, `wp eval`, and `wp eval-file` for
   debugging and quick scripts.

In no particular order, here are some third-party commands and workflows mentioned:
[Jetpack CLI](https://jetpack.me/support/jetpack-cli/), [WP Parser](https://github.com/WordPress/phpdoc-parser),
[ElasticPress](https://github.com/10up/ElasticPress), [WP Migrate DB Pro](https://deliciousbrains.com/wp-migrate-db-pro/doc/cli-addon/),
[WP CFM](http://forumone.github.io/wp-cfm/), [BackWPUp](https://github.com/inpsyde/backwpup),
[wp-cli-ssh](https://github.com/xwp/wp-cli-ssh), [wp-instant-setup](https://github.com/miya0001/wp-instant-setup),
[project-template-wordpress](https://github.com/QoboLtd/project-template-wordpress),
and [provisioning a new WordPress.org Theme Review environment](http://th-daily.shinichi.me/2014/10/27/memo-wp-cli-commands-for-the-theme-reviewers/).

One person said they use WP-CLI to make coffee. On behalf of everyone, I look forward
to the day I can install this command from the [package directory](https://github.com/wp-cli/wp-cli/issues/1564).

### Feature requests

Feel like contributing to WP-CLI over the holidays? Here’s a grab bag of enhancements
you could work on:

 * Better documentation (internals, extending, common workflows).
 * One single uber-command to install WordPress, including downloading files, creating
   the MySQLMySQL MySQL is a relational database management system. A database is
   a structured collection of data where content, configuration and other options
   are stored. [https://www.mysql.com](https://www.mysql.com/) database, setting
   up wp-config.php, and populating database tables.
 * Suggest correct syntax when a command is incorrectly entered (e.g. `git staus`).
 * Improved support for managing multiple networks: `wp network list`, `wp network
   create`.
 * Install plugins favorited by a given WordPress.orgWordPress.org The community
   site where WordPress code is created and shared by the users. This is where you
   can download the source code for WordPress core, plugins and themes as well as
   the central location for community conversations and organization. [https://wordpress.org/](https://wordpress.org/)
   user.
 * Verify theme and pluginPlugin A plugin is a piece of software containing a group
   of functions that can be added to a WordPress website. They can extend functionality
   or add new features to your WordPress websites. WordPress plugins are written
   in the PHP programming language and integrate seamlessly with WordPress. These
   can be free in the WordPress.org Plugin Directory [https://wordpress.org/plugins/](https://wordpress.org/plugins/)
   or can be cost-based plugin from a third-party. checksums.
 * Report when extra files are present in wp-admin or wp-includes (e.g. checksums
   of directories)
 * Save a template of a WordPress setup (similar to `grunt {my-task}`).
 * Disable all plugins except for a specific one. Or, load WP-CLI with only a given
   plugin active.
 * Install WordPress nightly builds without needing the betaBeta A pre-release of
   software that is given out to a large group of users to trial under real conditions.
   Beta versions have gone through alpha testing in-house and are generally fairly
   close in look, feel and function to the final product; however, design changes
   often occur as part of the process. plugin.
 * Provide a command to execute WP-Cron without requiring a HTTPHTTP HTTP is an 
   acronym for Hyper Text Transfer Protocol. HTTP is the underlying protocol used
   by the World Wide Web and this protocol defines how messages are formatted and
   transmitted, and what actions Web servers and browsers should take in response
   to various commands. request.
 * Define custom scaffolds for themes and plugins.
 * Generate posts, pages from a sitemap CSV.
 * Magically migrate data between environments (production -> staging).
 * Add option to exclude specific tables in `wp search-replace`.
 * Provide a way to log in with a one-time link.

If you can’t find an [existing Github issue](https://github.com/wp-cli/wp-cli/issues),
please create one and we can begin discussing implementation.

Thanks again to everyone who took the time to complete our user survey! May WP-CLI
continue to be a shining light for your WordPress development needs.

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcli%2F2015%2F12%2F01%2Fsurvey-results-2015%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/danielbachhuber/) [Daniel Bachhuber](https://profiles.wordpress.org/danielbachhuber/)
12:00 am _on_ November 23, 2015      

# 󠀁[Versions 0.21.1 and 0.20.4 released](https://make.wordpress.org/cli/2015/11/23/versions-0-21-1-and-0-20-4/)󠁿

WordPress 4.4 loads a few new files even more files in `wp-settings.php`. Because
WP-CLIWP-CLI WP-CLI is the Command Line Interface for WordPress, used to do administrative
and development tasks in a programmatic way. The project page is [http://wp-cli.org/](http://wp-cli.org/)
[https://make.wordpress.org/cli/](https://make.wordpress.org/cli/) has a custom `
wp-settings-cli.php` ([background](http://wp-cli.org/blog/how-wp-cli-loads-wordpress.html)),
WP-CLI v0.21.1 and v0.20.4 are compatibility releases to load these new files.

**Importantly, due to the nature of these changes, WP-CLI versions prior to 0.20.4
will be incompatible with WordPress 4.4.**

Inspect the nature of the change in [this pull request](https://github.com/wp-cli/wp-cli/pull/2218).

Contributors to this release: [danielbachhuber](https://github.com/danielbachhuber)

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcli%2F2015%2F11%2F23%2Fversions-0-21-1-and-0-20-4%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/danielbachhuber/) [Daniel Bachhuber](https://profiles.wordpress.org/danielbachhuber/)
12:00 am _on_ November 4, 2015      

# 󠀁[Version 0.21.0 released](https://make.wordpress.org/cli/2015/11/04/version-0-21-0/)󠁿

It’s been a pretty crazy week so far, and it’s only Wednesday.

As many of you are aware of, I launched a Kickstarter campaign Monday night: [A more RESTful WP-CLI](https://www.kickstarter.com/projects/danielbachhuber/a-more-restful-wp-cli).
Incredibly, it was 100% funded in just under 12 hours. Check out the link for more
details on what I’ll be working on in early 2016.

But, I have an even more **important note** about supported WordPress versions:

 * WP-CLIWP-CLI WP-CLI is the Command Line Interface for WordPress, used to do administrative
   and development tasks in a programmatic way. The project page is [http://wp-cli.org/](http://wp-cli.org/)
   [https://make.wordpress.org/cli/](https://make.wordpress.org/cli/) v0.22.0 (the
   next release) will bump the minimum supported WordPress version from 3.5 to 3.7(
   [background](https://github.com/wp-cli/wp-cli/issues/2134)).
 * WP-CLI versions prior to 0.20.3 will be incompatible with WordPress 4.4 ([background](http://wp-cli.org/blog/version-0.20.3.html)).

This important note may apply to you in some way — please take action accordingly.

WP-CLI v0.21.0 represents [109 resolved issues and pull requests](https://github.com/wp-cli/wp-cli/issues?q=milestone%3A0.21.0+is%3Aclosed).
Here’s what’s new.

### Load WordPress with `WP_CLI::get_runner()->load_wordpress();`

For a while now, you’ve been able to run a WP-CLI command before WordPress loads
by adding `@when before_wp_load` to your command docs. Now, you can load WordPress
that same command.

See how `wp eval` makes use of `WP_CLI::get_runner()->load_wordpress()`:

    ```
    class Eval_Command extends WP_CLI_Command {

        /**
         * Execute arbitrary PHP code.
         *
         * <php-code>
         * : The code to execute, as a string.
         *
         * [--skip-wordpress]
         * : Execute code without loading WordPress.
         *
         * @when before_wp_load
         *
         * ## EXAMPLES
         *
         *     wp eval 'echo WP_CONTENT_DIR;'
         */
        public function __invoke( $args, $assoc_args ) {
            if ( null === Utilsget_flag_value( $assoc_args, 'skip-wordpress' ) ) {
                WP_CLI::get_runner()->load_wordpress();
            }
            eval( $args[0] );
        }
    }
    ```

Use `wp eval --skip-wordpress <code>` to execute PHPPHP PHP (recursive acronym for
PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting
language that is especially suited for web development and can be embedded into 
HTML. [https://www.php.net/manual/en/index.php](https://www.php.net/manual/en/index.php)
without loading WordPress. Or, use `wp eval-file --skip-wordpress <file>` to, say,
execute a quick and dirty script leveraging WP-CLI utilities without needing a WordPress
install present.

Similarly, when you specify a `--version=<version>` with `wp core verify-checksums`,
WP-CLI will check to ensure coreCore Core is the set of software required to run
WordPress. The Core Development Team builds WordPress. files haven’t been modified—
without loading WordPress.

Creating this new feature was almost like replacing the engine on a moving car.

### More verbosity with `--debug`

When you supply the `--debug` flag, you’ll get more context into how WP-CLI is executing
your command.

Before:

    ```
    $ wp option get home --debug
    http://wordpress-test.dev
    ```

After:

    ```
    $ wp option get home --debug
    Debug: Using default global config: /home/vagrant/.wp-cli/config.yml (0.026s)
    Debug: No project config found (0.027s)
    Debug: Required file from config: /srv/www/wp-rest-cli/wp-rest-cli.php (0.059s)
    Debug: ABSPATH defined: /srv/www/wordpress-test.dev/ (0.06s)
    Debug: Begin WordPress load (0.063s)
    Debug: wp-config.php path: /srv/www/wordpress-test.dev/wp-config.php (0.065s)
    Debug: Set URL: wordpress-test.dev/ (0.066s)
    Debug: Loaded WordPress (0.515s)
    Debug: Running command: option get (0.516s)
    http://wordpress-test.dev
    ```

Make your own commands more helpful by including `WP_CLI::debug( $debug_message );`
at key checkpoints.

### Other changes in v0.21.0

Enhancements:

 * Use `wp core update-db --network` to upgrade databases across an entire network;
   also improves verbosity for this command by providing the `from` and `to` database
   versions.
 * Adds a `wp comment recount` command for recalcuating a post’s comment count.
 * Includes `wp taxonomy list`, `wp taxonomy get`, `wp post-type list` and `wp post-
   type get` for getting details about registered taxonomies and post types.
 * Use `--defer-term-counting` with `wp post update` or `wp post delete` to recalculate
   term count at the end of the operation for increased performance.
 * Returns a more useful error message when running `wp scaffold plugin-tests` with
   an invalid pluginPlugin A plugin is a piece of software containing a group of
   functions that can be added to a WordPress website. They can extend functionality
   or add new features to your WordPress websites. WordPress plugins are written
   in the PHP programming language and integrate seamlessly with WordPress. These
   can be free in the WordPress.org Plugin Directory [https://wordpress.org/plugins/](https://wordpress.org/plugins/)
   or can be cost-based plugin from a third-party. slug.
 * In `wp theme list`, indicates a parent theme by setting the `status=parent`. 
   This more clearly distinguishes between a genuinely inactive theme vs. an “inactive”
   theme being used as a parent theme.
 * Displays error message when trying to use `wp rewrite flush --hard` on a multisiteMultisite
   Multisite is a WordPress feature which allows users to create a network of sites
   on a single WordPress installation. Available since WordPress version 3.0, Multisite
   is a continuation of WPMU or WordPress Multiuser project. WordPress MultiUser
   project was discontinued and its features were included into WordPress core. 
   [Advanced Administration Handbook -> Create A Network.](https://developer.wordpress.org/advanced-administration/multisite/create-network/)
   install, because WordPress doesn’t generate a `.htaccess` file for multisite 
   installs.
 * Permits `--path` for `wp core download`, even when WP is detected. This lets 
   a custom WP-CLI command download WP to a subdirectory, when loaded from the scope
   of an existing WP install.
 * Adds `--post_type__not_in` argument to `wp export`, which can now produce an 
   export without, say, `feedbacks`.
 * Permits space-delimited IDs for `wp export --post__in`. This makes it easier 
   to pass IDs returned by `wp post list --format=ids`.
 * Includes an `.editorconfig` when using `wp scaffold plugin`.
 * Newly-generated `install-wp-tests.sh` files support `$WP_VERSION=trunk` or `$
   WP_VERSION=nightly` for running your plugin tests against WordPress trunk.
 * Warns user when `wp-config.php` isn’t writable for `wp core multisite-convert`.
 * Provides a more helpful error message when an invalid subcommand has a valid 
   parent command.
 * Supports using WP-CLI on a WordPress instance backed by APC cache, but only after
   warning and requiring confirmation.
 * Sniffssniff A module for [PHP Code Sniffer](https://github.com/squizlabs/PHP_CodeSniffer)
   that analyzes code for a specific problem. Multiple stiffs are combined to create
   a PHPCS standard. The term is named because it detects [code smells](https://en.wikipedia.org/wiki/Code_smell),
   similar to how a dog would "sniff" out food. out the custom vendor path if WP-
   CLI is a part of a larger Composer project.
 * Deprecates `wp post url` in favor of `wp post list --field=url`, but includes
   a backwards compatability shim for `wp post url`.
 * Supports `--autoload=(yes|no)` when using `wp option update` (requires WordPress
   4.2).
 * Supports multiple comment ids for `wp comment (spam|trash|approve)`.
 * Paginates help output on Windows using `more`.
 * Provides human-friendly output when rewrite rules successfully flush.

Bug fixes:

 * Generic arguments are no longer required for `wp post create` and `wp comment
   create`, allowing use of those commands without supplying, say, a title.
 * Accepts associative args with no right-side data.
 * Exhausts all possible options when looking for PHP binary with `wp cli update`.
   Previously, WP-CLI would try to call `php` directly, which would fail on systems
   where PHP wasn’t exposed as such.
 * Accommodates `wp_new_user_notification()`‘s deprecated second argument, depending
   on WordPress version.

You can browse the full list of [resolved issues](https://github.com/wp-cli/wp-cli/issues?q=milestone%3A0.21.0+is%3Aclosed)
on GithubGitHub GitHub is a website that offers online implementation of git repositories
that can easily be shared, copied and modified by other developers. Public repositories
are free to host, private repositories require a paid subscription. GitHub introduced
the concept of the ‘pull request’ where code changes done in branches by contributors
can be reviewed and discussed before being merged by the repository owner. [https://github.com/](https://github.com/).

Contributors to this release: [aaemnnosttv](https://github.com/aaemnnosttv), [borekb](https://github.com/borekb),
[danielbachhuber](https://github.com/danielbachhuber), [gmcinnes](https://github.com/gmcinnes),
[JRGould](https://github.com/JRGould), [johnbillion](https://github.com/johnbillion),
[kraftbj](https://github.com/kraftbj), [miya0001](https://github.com/miya0001), 
[ntwb](https://github.com/ntwb), [rodrigoprimo](https://github.com/rodrigoprimo),
[rmccue](https://github.com/rmccue) [szepeviktor](https://github.com/szepeviktor),
[torounit](https://github.com/torounit), [voldemortensen](https://github.com/voldemortensen),
[ypid](https://github.com/ypid)

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcli%2F2015%2F11%2F04%2Fversion-0-21-0%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/danielbachhuber/) [Daniel Bachhuber](https://profiles.wordpress.org/danielbachhuber/)
12:00 am _on_ October 30, 2015      

# 󠀁[Version 0.20.3 released](https://make.wordpress.org/cli/2015/10/30/version-0-20-3/)󠁿

WordPress 4.4 loads a few new files in `wp-settings.php` relating to oEmbed and 
the REST APIREST API The REST API is an acronym for the RESTful Application Program
Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is
how the front end of an application (think “phone app” or “website”) can communicate
with the data store (think “database” or “file system”) [https://developer.wordpress.org/rest-api/](https://developer.wordpress.org/rest-api/).
Because WP-CLIWP-CLI WP-CLI is the Command Line Interface for WordPress, used to
do administrative and development tasks in a programmatic way. The project page 
is [http://wp-cli.org/](http://wp-cli.org/) [https://make.wordpress.org/cli/](https://make.wordpress.org/cli/)
has a custom `wp-settings-cli.php` ([background](http://wp-cli.org/blog/how-wp-cli-loads-wordpress.html)),
WP-CLI v0.20.3 is a compatibility release to load these new files.

**Importantly, due to the nature of these changes, WP-CLI versions prior to 0.20.3
will be incompatible with WordPress 4.4.**

Stay tuned next week for WP-CLI v0.21.0 (which is also compatible with WordPress
4.4), the results of the [user survey](http://wp-cli.org/blog/user-survey-2015.html),
and a special announcement.

You can browse the full list of [resolved issues](https://github.com/wp-cli/wp-cli/issues?q=is%3Aclosed+milestone%3A0.20.2)
on GithubGitHub GitHub is a website that offers online implementation of git repositories
that can easily be shared, copied and modified by other developers. Public repositories
are free to host, private repositories require a paid subscription. GitHub introduced
the concept of the ‘pull request’ where code changes done in branches by contributors
can be reviewed and discussed before being merged by the repository owner. [https://github.com/](https://github.com/).

Contributors to this release: [danielbachhuber](https://github.com/danielbachhuber),
[kraftbj](https://github.com/kraftbj), [rmccue](https://github.com/rmccue)

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcli%2F2015%2F10%2F30%2Fversion-0-20-3%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/danielbachhuber/) [Daniel Bachhuber](https://profiles.wordpress.org/danielbachhuber/)
12:00 am _on_ October 14, 2015      

# 󠀁[Version 0.20.2 released](https://make.wordpress.org/cli/2015/10/14/version-0-20-2/)󠁿

Since the beginning, `install-wp-tests.sh` (the setup script for pluginPlugin A 
plugin is a piece of software containing a group of functions that can be added 
to a WordPress website. They can extend functionality or add new features to your
WordPress websites. WordPress plugins are written in the PHP programming language
and integrate seamlessly with WordPress. These can be free in the WordPress.org 
Plugin Directory [https://wordpress.org/plugins/](https://wordpress.org/plugins/)
or can be cost-based plugin from a third-party. unit tests) has installed the WordPress
testing framework from trunk. However, the WordPress project recently made changes
to the testing framework which mean the trunk version is incompatible with older,
tagged WordPress releases.

We’ve updated `install-wp-tests.sh` provided by WP-CLIWP-CLI WP-CLI is the Command
Line Interface for WordPress, used to do administrative and development tasks in
a programmatic way. The project page is [http://wp-cli.org/](http://wp-cli.org/)
[https://make.wordpress.org/cli/](https://make.wordpress.org/cli/) to use an appropriately-
tagged version of the WordPress testing framework. However, because `install-wp-
tests.sh` is added to a plugin during the scaffolding process, plugin authors will
need to update the plugin copy of the script to fix failing tests. We weren’t able
to get to the entire internet, but here are some plugins that have already been 
updated: [pantheon-systems/wp-native-php-sessions](https://github.com/pantheon-systems/wp-native-php-sessions/pull/20),
[washingtonstateuniversity/WSUWP-Plugin-Color-Palette](https://github.com/washingtonstateuniversity/WSUWP-Plugin-Color-Palette/pull/5),
[ethymos/delibera](https://github.com/ethymos/delibera/pull/45)

You can browse the full list of [resolved issues](https://github.com/wp-cli/wp-cli/issues?q=is%3Aclosed+milestone%3A0.20.2)
on GithubGitHub GitHub is a website that offers online implementation of git repositories
that can easily be shared, copied and modified by other developers. Public repositories
are free to host, private repositories require a paid subscription. GitHub introduced
the concept of the ‘pull request’ where code changes done in branches by contributors
can be reviewed and discussed before being merged by the repository owner. [https://github.com/](https://github.com/).

Contributors to this release: [danielbachhuber](https://github.com/danielbachhuber),
[torounit](https://github.com/torounit)

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcli%2F2015%2F10%2F14%2Fversion-0-20-2%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/danielbachhuber/) [Daniel Bachhuber](https://profiles.wordpress.org/danielbachhuber/)
12:00 am _on_ October 14, 2015      

# 󠀁[WP-CLI and you, 2015 edition](https://make.wordpress.org/cli/2015/10/14/user-survey-2015/)󠁿

We’d like to know how people are using WP-CLIWP-CLI WP-CLI is the Command Line Interface
for WordPress, used to do administrative and development tasks in a programmatic
way. The project page is [http://wp-cli.org/](http://wp-cli.org/) [https://make.wordpress.org/cli/](https://make.wordpress.org/cli/)
so we set up a [quick survey](https://docs.google.com/forms/d/1SlT8vG9jDzLIwEUT944OFNL1lLMnjdL2GR1FMOQvtDk/viewform)(
just 5 questions). We’d appreciate it if you would fill it out. The results will
be posted here, in a future blog post.

Thanks!

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcli%2F2015%2F10%2F14%2Fuser-survey-2015%2F%23respond&locale=en_US)

## Post navigation

[← Older posts](https://make.wordpress.org/cli/page/14/?output_format=md)

[Newer posts →](https://make.wordpress.org/cli/page/12/?output_format=md)