Hello 2015! Here’s your first release for the new year.
Update WP-CLI using WP-CLI
We’ve made it even easier to keep WP-CLI up to date. If you’re using the Phar file and it’s writable, you can call wp cli update to install the latest version.
$ ./wp-cli.0.17.1.phar cli update
You have version 0.17.1. Would you like to update to 0.18.0? [y/n] y
Downloading from https://github.com/wp-cli/wp-cli/releases/download/v0.18.0/wp-cli.phar...
New version works. Proceeding to replace.
Success: Updated WP-CLI to 0.18.0
Of course, if you’ve installed WP-CLI via Composer or Git, you should run master to always get the latest and greatest.
Manage post and user terms
WP-CLI supports managing terms associated with posts and users:
$ wp post term add 1 post_tag foo
Success: Added term.
$ wp post term add 1 post_tag bar
Success: Added term.
$ wp post term list 1 post_tag
+---------+------+------+----------+
| term_id | name | slug | taxonomy |
+---------+------+------+----------+
| 4 | bar | bar | post_tag |
| 3 | foo | foo | post_tag |
+---------+------+------+----------+
$ wp post term remove 1 post_tag foo bar
Success: Deleted term.
Consistent behavor for plugin activation and deactivation
We’ve cleaned up the behavior for activating and deactivating plugins:
- If a plugin is already active, it’s allowed to become network active.
- If a plugin is already network active, it’s not allowed to become active.
- Network active plugins must be deactivated with the
--network flag.
- A warning will be thrown when an inactive plugin is attempted to be deactivated.
Previously, the behavior was quite inconsistent — sometimes you’d get errors, sometimes silent success, etc.
What’s coming in 2015
If I may editorialize a bit, I think 2015 could be an interesting year for WP-CLI.
The WP-API project has more overlap than you may think. The task of building a RESTful API for WordPress is also a task of preparing a useful abstraction to interact with WordPress internals. Instead of directly calling wp_update_post(), the API uses WP_JSON_Posts_Controller::update_item(), which is a consistent interface with WP_JSON_Terms_Controller::update_item() and WP_JSON_Users_Controller::update_item().
Similarly, we too have had to invent our own pattern of abstraction for interacting with WordPress internals. It would be nice if we could drop much of our code, and leverage WP-API instead. And, what if WP_JSON_Controller was the pattern we adopted for listing, getting, creating, updating, or deleting any WordPress primitive, which means that plugins implementing it would automatically have WP-CLI commands?
Plus, I’d think it would be quiet useful to have feature parity between what I can do locally with WP-CLI, and what I can do against a remote site via WP-API.
Other changes
Enhancements:
- Migrate users between sites in one go —
wp user import-csv <file> supports CSV produced by wp user list --format=csv > <file>.
- Use
wp user list --network to list all users in your network.
- All subcommand help docs also include global parameters, to give those global parameters more visibility.
- If
--help flag is passed, a command will now show the help screen instead of erroring on invalid parameters. Useful for debugging aforementioned errored parameters.
- Similar to
--skip-plugins=<plugin>,<plugin>, the --skip-themes global parameter allows you to skip loading specific themes when using WP-CLI. If you run a hosting company, this can be a useful way to blacklist known problem themes when performing maintenance.
wp core language improvements: Use wp core language list --fields=language --status=active to get the active language; install and activate a language with wp core language install <language> --activate; active language can’t be uninstalled.
wp (post|comment|term|user) get <object-id> supports --fields parameter for getting specific fields.
- Use
wp post update <object-id> to update a post’s content from a <file>.
- Activate all installed plugins at once with
wp plugin activate --all.
wp plugin list now indicates version numbers for mu plugins when they have properly formatted plugin headers.
- Added support for specifying any version for
wp plugin update <plugin>... --version=<version>. Previously, the parameter only supported ‘dev’.
wp option update <name> <value> will supply a friendly message when the option is already set to the supplied value.
- Added alias from
wp theme uninstall to wp theme delete, giving greater parity between theme and plugin interfaces.
- Adopted a Debian package build script.
Bug fixes:
- Resolved a nasty file cache collision between
wp core update and wp core download. WP_CLI\CoreUpgrader was renaming ZIP files to .tar.gz, which wp core download would then attempt to use.
- If a file required by
wp-cli.yml or --require is missing, WP-CLI will throw a human-friendly error instead of fataling.
wp cli info runs early to protect from invalid runtime configurations.
wp core config will only define WPLANG for WP < 4.0.
/bin/install-wp-tests.sh fixes: Properly marked executable when scaffolding plugin unit tests; works on older versions of Bash; added support for WP_CORE_DIR environment variable.
wp comment (approve|unapprove) will actually change comment status.
wp_is_mobile() is defined, avoiding fatals in some themes and plugins.
- Windows fixes: disabled colors by default; allows deleting plugins that aren’t in folders (e.g. Hello Dolly).
- Throws an error when trying to get meta on a missing object, instead of silently failing.
- Throws an error when trying to install multisite with subdomains when domain is
localhost.
- Doesn’t force update check on
wp plugin install to reduce dependency on WordPress.org.
You can browse the full list of resolved issues on Github.
Contributors to this release: viper007bond, boonebgorges, borekb, bparbs, danielbachhuber, here, miya0001, nyordanov, oneumyvakin, ozh, pippinsplugins, rodrigoprimo, spacedmonkey, ntwb, lordspace, szepeviktor, tiagohillebrandt, wturrell