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. 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-CLI v0.22.0 (the next release) will bump the minimum supported WordPress version from 3.5 to 3.7 (background).
- WP-CLI versions prior to 0.20.3 will be incompatible with WordPress 4.4 (background).
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. 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 === Utils\get_flag_value( $assoc_args, 'skip-wordpress' ) ) {
WP_CLI::get_runner()->load_wordpress();
}
eval( $args[0] );
}
}
Use wp eval --skip-wordpress <code>
to execute 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 core 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 thefrom
andto
database versions. - Adds a
wp comment recount
command for recalculating a post’s comment count. - Includes
wp taxonomy list
,wp taxonomy get
,wp post-type list
andwp post-type get
for getting details about registered taxonomies and post types. - Use
--defer-term-counting
withwp post update
orwp 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 plugin slug. - In
wp theme list
, indicates a parent theme by setting thestatus=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 multisite install, because WordPress doesn’t generate a.htaccess
file for multisite installs. - Permits
--path
forwp 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 towp 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 bywp post list --format=ids
. - Includes an
.editorconfig
when usingwp 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 forwp 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.
- Sniffs out the custom vendor path if WP-CLI is a part of a larger Composer project.
- Deprecates
wp post url
in favor ofwp post list --field=url
, but includes a backwards compatability shim forwp post url
. - Supports
--autoload=(yes|no)
when usingwp 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
andwp 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 callphp
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 on Github.
Contributors to this release: aaemnnosttv, borekb, danielbachhuber, gmcinnes, JRGould, johnbillion, kraftbj, miya0001, ntwb, rodrigoprimo, rmccue szepeviktor, torounit, voldemortensen, ypid