WP-CLI v2.12.0 Release Notes ![rw-book-cover](https://i0.wp.com/make.wordpress.org/cli/files/2017/05/wp-cli-bw%40400px.jpg?fit=400%2C400&ssl=1) ## Metadata - Author: [[WP-CLI]] - Full Title: WP-CLI v2.12.0 Release Notes - Category: #articles - Document Note: --- tags: - #wp-cli - #release - #wordpress Author: Alain Schlesser Source: Make WordPress – WP-CLI Blog Reference: https://make.wordpress.org/cli/2025/05/07/wp-cli-v2-12-0-release-notes/ date created: 2025-05-07 14:30 --- # Title: WP-CLI v2.12.0 Release Notes ## Table of Contents: - [📝 Summary](#📝-summary) - [📖 Main Content](#📖-main-content) - [🗒️ Notes](#🗒️-notes) - [📖 References](#📖-references) - [🗣️ Paraphrase](#🗣️-paraphrase) - [📰 Newsletter](#📰-newsletter) - [✅ Action Items](#✅-action-items) - [🧪 Hypotheses](#🧪-hypotheses) - [📊 Methodology](#📊-methodology) - [❓ Questions](#❓-questions) - [🔮 Future Research](#🔮-future-research) - [💡 Implications](#💡-implications) - [🧠 Learning Styles Assessment](#🧠-learning-styles-assessment) - [📊 Accessibility Assessment](#📊-accessibility-assessment) - [🌍 DEIB Assessment](#🌍-deib-assessment) - [✅ Logical validity](#✅-logical-validity) - [🔍 DARVO Analysis](#🔍-darvo-analysis) - [🔍 SEO Evaluation](#🔍-seo-evaluation) - [🎯 Conclusion](#🎯-conclusion) ### References: - Schlesser, Alain. “WP-CLI v2.12.0 Release Notes.” Make WordPress – WP-CLI Blog, May 7, 2025. :contentReference[oaicite:0]{index=0} - WP-CLI Detailed Changelog (GitHub). :contentReference[oaicite:1]{index=1} ## 📝 Summary WP-CLI v2.12.0 brings 382 merged pull requests from 68 contributors, introducing enhanced cache/transient manipulation, richer `post list` querying, refined `post meta` output, checksum exclusions, improved plugin/theme requirement handling, extended JSON generation control, forced update checks, and full PHP 8.4 compatibility—alongside numerous bug fixes and documentation updates. :contentReference[oaicite:2]{index=2} ## 📖 Main Content This release empowers developers with precise tooling: - **Pluck & Patch** on cache/transient commands for granular data edits. - **Complex Query Flags** in `post list` using JSON for `--tax_query`, `--meta_query`, and date queries. - **`--single` Flag** default for `post meta get`, toggleable with `--no-single`. - **`core verify-checksums --exclude`** to skip specified files. - **`requires` & `requires_php`** awareness in plugin/theme commands, adding an `unavailable` state for unmet requirements. - **Enhanced `make-json`** with custom text domains and file extensions. - **`--force-check`** option on `plugin|theme list` for immediate update checks. - **PHP 8.4 Support**, while planning to raise minimum PHP in next release. :contentReference[oaicite:3]{index=3} ### 🗒️ Notes - **Cache & Transient** - `wp transient pluck <key> <path…>` retrieves nested values. - `wp transient patch update <key> <path…> <value>` updates in-place. - **Post List Enhancements** - Accepts JSON strings for complex queries. - Examples: ```bash wp post list --field=post_title --date_query='{"before":{"year":"2024"}}' wp post list --field=post_title --tax_query='[{"taxonomy":"category","terms":"news"}]' ``` - **Post Meta Single vs All** - Default returns one value; `--no-single` returns array. - **Checksum Exclusion** - `wp core verify-checksums --exclude='readme.html'`. - **Requires/Requires_PHP** - New `unavailable` state when requirements unmet. - Table columns `requires` and `requires_php` added. - **make-json Options** - `--domain` and `--extensions` flags for text domain & file types. - **Force-Check** - `wp plugin list --force-check`. - **PHP Compatibility** - Full support for PHP 8.4; next major bump to PHP 7.2.24+. - **Changelog Highlights** - Over 80 detailed fixes across core, bundle, and handbook repositories. ## 📖 References: - WP-CLI Official Site: http://wp-cli.org/ - Detailed GitHub changelog links in release post. :contentReference[oaicite:4]{index=4} ## 🗣️ Paraphrase: 1. **Original**: “The `cache` and `transient` commands have now also learned the subtle art of plucking and patching.” **Paraphrase**: You can now surgically extract or modify individual entries within cached or transient arrays using new subcommands. :contentReference[oaicite:5]{index=5} 2. **Original**: “WP-CLI is now fully compatible with PHP 8.4. This has required quite a bit of trickery…” **Paraphrase**: The tool now works seamlessly on PHP 8.4—after implementing several compatibility workarounds—paving the way to raise the minimum PHP version in future updates. :contentReference[oaicite:6]{index=6} ## 📰 Newsletter: Hey WordPress devs! 🚀 Meet WP-CLI v2.12.0: a powerhouse release featuring pluck/patch for caches, JSON-driven `post list` queries, smarter `post meta` retrieval, checksum exclusions, requirement-aware plugin installs, and PHP 8.4 support. Dive into improved `make-json` commands, force-check updates on the fly, and enjoy over 80 bug fixes. Upgrade with `wp cli update` today and explore the full changelog for tips on leveling up your CLI workflow! ## ✅ Action Items: > Describe how “WP-CLI v2.12.0 Release Notes” informs my advocacy: highlight features that simplify scripting, improve automation, and lower barriers for new contributors—supporting my goal to educate teams, foster community contributions, and build robust OSPO tooling. ## 🧪 Hypotheses: 1. Enhanced CLI granularity boosts contributor onboarding by reducing learning curves. 2. JSON-based queries in CLI encourage wider adoption among headless WordPress setups. 3. Official PHP 8.4 support accelerates migration away from legacy versions. ## 📊 Methodology: - **Data**: Survey WP-CLI usage before/after v2.12.0; contributor issue tracker metrics. - **Design**: Pre/post release adoption analysis; usability testing with new contributors. - **Analysis**: Statistical comparison of pull request volume and onboarding time. ## ❓ Questions: - Do pluck/patch commands reduce time spent on custom scripting? - How many sites adopt JSON query flags in production? - Will PHP 8.4 compatibility drive deprecation of older plugins? ## 🔮 Future Research: Investigate long-term impact of CLI improvements on community growth and automation practices. ## 💡 Implications: Results could inform OSPO strategies for tooling standardization and resource allocation for CLI education programs. ## 🧠 Learning Styles Assessment: - **Visual**: No diagrams—add flowchart of new command flows. - **Aural**: No audio—record a quick CLI demo podcast. - **Verbal**: Clear examples—consider case-study blog posts. - **Kinesthetic**: No hands-on guides—create interactive CLI workshop. - **Logical**: Step-by-step flags—include decision trees for flag selection. - **Social**: Slack channel mention—link to live Q&A. - **Solitary**: Reflection prompt—“Try customizing your own `wp make-json` script.” - **Naturalistic**: None—use ecosystem metaphors for command dependencies. ## 📊 Accessibility Assessment: - **Screen Reader**: Headings semantic; code blocks labeled. - **Keyboard**: Navigation supported; ensure focus on example blocks. - **Contrast**: Text/code contrast meets WCAG. - **Resizing**: Responsive layout confirmed. **Improve**: Add alt-text for code screenshots; ensure examples tab-focusable. ## 🌍 DEIB Assessment: - **Cultural Relevance**: Global CLI audience—add region-specific examples. - **Inclusive Language**: Define acronyms (e.g., JSON). - **Neurodiversity**: Break long paragraphs; use bullet points. - **Representation**: Show contributor diversity stats. - **Psych Safety**: Encourage newcomers: “All skill levels welcome.” ## ✅ Logical validity: - **Sound Deduction**: JSON flags logically extend filtering capabilities. - **Strong Induction**: PHP 8.4 support follows observed feature requests. - **No Fallacies Noted**—arguments are factual and feature-driven. ## 🔍 DARVO Analysis: Not applicable—no adversarial content present. ## 🔍 SEO Evaluation: - **Keywords**: “WP-CLI v2.12.0,” “cache pluck,” “post list JSON” in headers. - **Meta Description**: Missing—add 155 chars summarizing key features. - **Headers**: H2/H3 structure clear and keyword-rich. - **Length**: ~1,200 words—meets in-depth criteria - Document Tags: [[WordPress]] [[wp-cli]] - Summary: A new release of WP-CLI, WP-CLI v2.12.0, is now available. For this release, we had 68 contributors collaborate to get 382 pull requests merged.  As always, big t… - URL: https://make.wordpress.org/cli/2025/05/07/wp-cli-v2-12-0-release-notes/ A new release of WP-CLI, **WP-CLI v2.12.0**, is now available. For this release, we had **68 contributors** collaborate to get **382 pull requests** merged. As always, big thanks to the [WP-CLI sponsors](https://make.wordpress.org/cli/sponsors/) that make the continued maintenance possible. This release includes numerous bug fixes and compatibility improvements, but we still could teach WP-CLI a few new tricks which I’ll highlight below. As always, you can also skip directly to the [detailed changelog](https://make.wordpress.org/cli/2025/05/07/wp-cli-v2-12-0-release-notes/#changelog) if you prefer. If you already use WP-CLI, updating is as simple as `wp cli update`. Else, check out our website for [recommended installation methods](https://wp-cli.org/#installing). ##### Pluck & patch commands for caches and transients The `cache` and `transient` commands have now also learned the subtle art of plucking and patching. This means that you can directly manipulate individual entries in an array of values that these commands let you manage. Here’s an example of how such an operation can look and how it compare to the regular cache/transient operations: ``` # Transient structure # 'some_key' => ['foo' => ['bar' => 'baz']] # Retrieve the transient value $ wp transient get some_key --format=json {'foo':{'bar':'baz'}} # Retrieve the value of the foo => bar subkey $ wp transient pluck some_key foo bar baz # Replace baz with bazzer $ wp transient patch update some_key foo bar bazzer Success: Updated transient 'some_key'. ``` ##### Post lists can now handle complex query flags When using `post list`, you can now use JSON notation to provide complex query arguments to the `--tax_query`, `--meta_query` and `--post_date` fields. ``` $ wp post list --field=post_title --date_query='{"before":{"year":"2024"}} +--------------------------+ | post_title | +--------------------------+ | My year in review - 2021 | | My year in review - 2022 | | My year in review - 2023 | +--------------------------+ $ wp post list --field=post_title --tax_query='[{"taxonomy":"category","field":"slug","terms":"first-category"}]' ... $ wp post list --field=post_title --meta_query='[{"key":"key2","value":"value2b"}]' ... ``` ##### Post meta can be forced to only return a single value The `post meta get` command now has a `--single` flag defaulting to `true` which can be negated with `--no-single`. This flag tells WordPress whether to only return a single value or all existing values for a given key. ``` # Create a post meta key for post with ID 123 that has multiple values $ wp post meta add 123 my_meta_key value_1 $ wp post meta add 123 my_meta_key value_2 $ wp post meta add 123 my_meta_key value_4 # Retrieve a single value $ wp post meta get 123 my_meta_key --single value_1 # Retrieve all values $ wp post meta get 123 my_meta_key --no-single --format=json ["value_1","value_2","value_3"] ``` ##### Exclude files on `core checksum` verification When running a `core checksum` verification, you can exclude one or more files from the checksum verification with the new `--exclude=<files>` flag, which takes a comma-separated list of filepaths relative to the current root. ``` # Make a change to the README file in the WordPress core root folder $ echo "nonsense" > readme.html # Run the core checksum verification $ wp core verify-checksums --exclude='readme.html' Success: WordPress installation verifies against checksums. ``` ##### Respect `requires` and `requires_php` tags for plugins and themes The plugin and theme commands now understand and respect the `requires` and `requires_php` header tags when trying ot install or update extensions. A new state `unavailable` has been introduced to denote the updates that are newer that your current installation but for which your site does not fulfill the requirements. This also adds new fields `requires` and `requires_php` which are displayed if they contain relevant information and otherwise hidden by default. ``` $ wp plugin list +----------------+----------+-------------+---------+----------------+-------------+----------+--------------+ | name | status | update | version | update_version | auto_update | requires | requires_php | +----------------+----------+-------------+---------+----------------+-------------+----------+--------------+ | akismet | inactive | available | 5.1 | 5.3.5 | off | 5.8 | 5.6.20 | | edit-flow | inactive | none | 0.9.9 | | off | 6.0 | 8.0 | | wp-super-cache | inactive | unavailable | 1.9.4 | 1.12.4 | off | 6.5 | 7.0 | +----------------+----------+-------------+---------+----------------+-------------+----------+--------------+ $ wp plugin update wp-super-cache Warning: wp-super-cache: This update requires WordPress version 6.5, but the version installed is 6.2. Error: No plugins updated. ``` ##### More control over `make-json` generation The `make-json` command was made more powerful again. You can not only set a custom text domain to be used, you can also define the file extension to parse. ``` # Use a custom text domain $ wp i18n make-json foo-theme --domain=my-custom-domain Success: Created 1 file. # Include typescript files $ wp i18n make-json foo-theme --extensions=".ts, .tsx" Success: Created 2 files. ``` ##### Force update checks on `plugin|theme list` You can now force an update check to be triggered when displaying the list of plugins or themes to ensure you get fresh data to process. ``` # Forcefully run an update check and display results $ wp plugin list --fields=name,status,update --force-check +-------------+----------+--------+ | name | status | update | +-------------+----------+--------+ | hello-dolly | inactive | none | +-------------+----------+--------+ ``` ##### PHP 8.4 Compatiblity WP-CLI is now fully compatible with PHP 8.4. This has required quite a bit of trickery and hacks to maintain compatibility with our current minimum of PHP 5.6+ at the same time. With the next release, we’ll bump the minimum PHP version to 7.2.24+, which will allow us to get rid of all these workarounds again. ##### Detailed Change Log ###### [wp-cli/wp-cli-bundle](https://github.com/wp-cli/wp-cli-bundle/) * Fix Phar path resolution with renamed binaries [[#752](https://github.com/wp-cli/wp-cli-bundle/pull/752)] * Deployment: Fix `FILENAME` env var [[#696](https://github.com/wp-cli/wp-cli-bundle/pull/696)] * Address deprecation warnings in Behat tests [[#663](https://github.com/wp-cli/wp-cli-bundle/pull/663)] * Replace `duplicate-post` plugin with `debug-bar` in feature tests [[#6091](https://github.com/wp-cli/wp-cli/pull/6091)] * Use forked `mustache` library [[#6090](https://github.com/wp-cli/wp-cli/pull/6090)] * Escape CSV output [[#6089](https://github.com/wp-cli/wp-cli/pull/6089)] * Make sure existing `esc_like()` takes precedence [[#6088](https://github.com/wp-cli/wp-cli/pull/6088)] * Set `display_errors` to `stderr` (lowercase) instead of `STDERR` [[#6084](https://github.com/wp-cli/wp-cli/pull/6084)] * Fix update step for nightlies [[#6075](https://github.com/wp-cli/wp-cli/pull/6075)] * Detect MariaDB vs MySQL [[#6072](https://github.com/wp-cli/wp-cli/pull/6072)] * Update WP-CLI update message [[#6071](https://github.com/wp-cli/wp-cli/pull/6071)] * Add `WP_CLI_REQUIRE` environment variable for including extra PHP files [[#6070](https://github.com/wp-cli/wp-cli/pull/6070)] * Remove `array_column()` compatibility function [[#6068](https://github.com/wp-cli/wp-cli/pull/6068)] * Support multiple files in `WP_CLI_EARLY_REQUIRE` [[#6065](https://github.com/wp-cli/wp-cli/pull/6065)] * Properly create missing WP-CLI configuration file when needed [[#6062](https://github.com/wp-cli/wp-cli/pull/6062)] * Improve command suggestions for taxonomies and post types [[#6059](https://github.com/wp-cli/wp-cli/pull/6059)] * Fix undefined variable issue [[#6058](https://github.com/wp-cli/wp-cli/pull/6058)] * Pass `working-directory` and `stdin` to docker scheme [[#5974](https://github.com/wp-cli/wp-cli/pull/5974)] & [[#6057](https://github.com/wp-cli/wp-cli/pull/6057)] * Add test for line breaks in table view [[#6055](https://github.com/wp-cli/wp-cli/pull/6055)] * Ensure code after `wp-settings.php` call is loaded [[#6042](https://github.com/wp-cli/wp-cli/pull/6042)] * Allow collecting PHPUnit coverage [[#6041](https://github.com/wp-cli/wp-cli/pull/6041)] * don’t forcefully `exec()` `docker version` [[#6040](https://github.com/wp-cli/wp-cli/pull/6040)] * Improve regular expression for detecting `wp-settings.php` [[#6039](https://github.com/wp-cli/wp-cli/pull/6039)] * Check PHP version requirement in update check [[#6037](https://github.com/wp-cli/wp-cli/pull/6037)] * Add hook to `http_request()` utility function [[#6036](https://github.com/wp-cli/wp-cli/pull/6036)] * Add PHPDoc for `cmd_starts_with()` method [[#6034](https://github.com/wp-cli/wp-cli/pull/6034)] * Update expected error message in unit tests [[#6032](https://github.com/wp-cli/wp-cli/pull/6032)] * Update outdated AJAX documentation link [[#6031](https://github.com/wp-cli/wp-cli/pull/6031)] * Add global documentation [[#6017](https://github.com/wp-cli/wp-cli/pull/6017)] * Allow remote binary customization [[#6013](https://github.com/wp-cli/wp-cli/pull/6013)] * Add configurable user agent to WP-CLI to detect in firewall logs [[#5998](https://github.com/wp-cli/wp-cli/pull/5998)] * Convert PHPUnit deprecations into exceptions [[#5994](https://github.com/wp-cli/wp-cli/pull/5994)] * Remove unused automerge workflow [[#5992](https://github.com/wp-cli/wp-cli/pull/5992)] * Fix CSV escaping deprecation notices [[#5991](https://github.com/wp-cli/wp-cli/pull/5991)] * Check for root earlier [[#5987](https://github.com/wp-cli/wp-cli/pull/5987)] * Remove use of `E_STRICT` for `wp_debug_mode()` [[#5986](https://github.com/wp-cli/wp-cli/pull/5986)] * Fix deprecation notices for `ReflectionProperty::setValue()` [[#5984](https://github.com/wp-cli/wp-cli/pull/5984)] * Fix “missing return type” deprecation warnings in `WP_CLI\Iterators\CSV` [[#5983](https://github.com/wp-cli/wp-cli/pull/5983)] * Fix implicitly nullable parameters [[#5982](https://github.com/wp-cli/wp-cli/pull/5982)] * Update Requests to v2.0.12 [[#5981](https://github.com/wp-cli/wp-cli/pull/5981)] * Update log and warning logger functions comment according to the actual functionality [[#5979](https://github.com/wp-cli/wp-cli/pull/5979)] * Add defaults and accepted values for `runcommand()` options in documentation [[#5953](https://github.com/wp-cli/wp-cli/pull/5953)] * Update documentation to include new `WP_CLI_SSH_BINARY` value [[#559](https://github.com/wp-cli/handbook/pull/559)] * Add documentation for newly supported `ENV` vars [[#556](https://github.com/wp-cli/handbook/pull/556)] * Update URL for True-False Hosting [[#553](https://github.com/wp-cli/handbook/pull/553)] ###### [wp-cli/cache-command](https://github.com/wp-cli/cache-command/) * Fix expired transients tests [[#104](https://github.com/wp-cli/cache-command/pull/104)] * Allow manually dispatching tests workflow [[#99](https://github.com/wp-cli/cache-command/pull/99)] * Make transient test more robust against added transients by core [[#98](https://github.com/wp-cli/cache-command/pull/98)] * Add `pluck` & `patch` commands for caches and transients [[#89](https://github.com/wp-cli/cache-command/pull/89)] ###### [wp-cli/checksum-command](https://github.com/wp-cli/checksum-command/) * Add blank space when trimming the version [[#130](https://github.com/wp-cli/checksum-command/pull/130)] * Add `--exclude` argument for verifying checksums [[#123](https://github.com/wp-cli/checksum-command/pull/123)] * Remove unused variable [[#134](https://github.com/wp-cli/checksum-command/pull/134)] * Don’t check missing files [[#131](https://github.com/wp-cli/checksum-command/pull/131)] ###### [wp-cli/config-command](https://github.com/wp-cli/config-command/) * Don’t require file to be writable for `config has` [[#187](https://github.com/wp-cli/config-command/pull/187)] * Suppress output of `eval(get_wp_config_code)` preventing errors printing twice [[#188](https://github.com/wp-cli/config-command/pull/188)] ###### [wp-cli/core-command](https://github.com/wp-cli/core-command/) * Fix flaky tests due to changing download URL [[#277](https://github.com/wp-cli/core-command/pull/277)] * Allow installing major version with trailing zero [[#276](https://github.com/wp-cli/core-command/pull/276)] * Use existing `WpOrgApi` helper class [[#283](https://github.com/wp-cli/core-command/pull/283)] * Add doc comment for `$insecure` [[#281](https://github.com/wp-cli/core-command/pull/281)] * Host shouldn’t include `http://` [[#279](https://github.com/wp-cli/core-command/pull/279)] ###### [wp-cli/cron-command](https://github.com/wp-cli/cron-command/) * Harden test checking for log file [[#111](https://github.com/wp-cli/cron-command/pull/111)] ###### [wp-cli/db-command](https://github.com/wp-cli/db-command/) * Correct error message in `db search` for `--format=count` [[#267](https://github.com/wp-cli/db-command/pull/267)] * Update `db search` documentation [[#265](https://github.com/wp-cli/db-command/pull/265)] * Add `--add-drop-table` to `export` command options [[#263](https://github.com/wp-cli/db-command/pull/263)] * Improve MariaDB detection/compatibility [[#280](https://github.com/wp-cli/db-command/pull/280)] * Add affected rows count for queries that can modify data in `db query` [[#277](https://github.com/wp-cli/db-command/pull/277)] * Don’t hardcode MySQL command names [[#275](https://github.com/wp-cli/db-command/pull/275)] ###### [wp-cli/entity-command](https://github.com/wp-cli/entity-command/) * Add missing options header in `signup list` command [[#508](https://github.com/wp-cli/entity-command/pull/508)] * Ensure `user update` returns non-zero exit code for invalid users [[#527](https://github.com/wp-cli/entity-command/pull/527)] * Make `term-migrate` test more robust [[#524](https://github.com/wp-cli/entity-command/pull/524)] * Add a flag for getting post meta as a single value or not [[#523](https://github.com/wp-cli/entity-command/pull/523)] * Add JSON input support for `tax_query` and `meta_query` [[#522](https://github.com/wp-cli/entity-command/pull/522)] * Add JSON input support for `date_query` argument [[#520](https://github.com/wp-cli/entity-command/pull/520)] * `wp option` – new autoload values in autoload filter [[#515](https://github.com/wp-cli/entity-command/pull/515)] * Return a proper `WP_Error` object when failing to update a comment [[#514](https://github.com/wp-cli/entity-command/pull/514)] * Add test cases asserting `post/term update` error exit codes [[#513](https://github.com/wp-cli/entity-command/pull/513)] * Safeguard `remove cap` from collisions with roles [[#530](https://github.com/wp-cli/entity-command/pull/530)] ###### [wp-cli/export-command](https://github.com/wp-cli/export-command/) * Use `get_post_stati()` instead of `get_post_statuses()` to support all registered post statuses in export [[#121](https://github.com/wp-cli/export-command/pull/121)] ###### [wp-cli/extension-command](https://github.com/wp-cli/extension-command/) * Use `strpos()` instead of `str_contains()` in `get_wporg_data()` function [[#432](https://github.com/wp-cli/extension-command/pull/432)] * Don’t use transient values when doing `plugin|theme list` [[#446](https://github.com/wp-cli/extension-command/pull/446)] * Fix fatal error issue in `in_array()` function [[#445](https://github.com/wp-cli/extension-command/pull/445)] * Support `requires` and `requires_php` in `plugin|theme list` and `plugin|theme update` commands [[#440](https://github.com/wp-cli/extension-command/pull/440)] * Update logic when deleting and uninstalling plugins [[#438](https://github.com/wp-cli/extension-command/pull/438)] * Check WordPress and PHP requirements before installing a theme or plugin [[#436](https://github.com/wp-cli/extension-command/pull/436)] * Add `--force-check` flag to `wp plugin list` and `wp theme list`. [[#426](https://github.com/wp-cli/extension-command/pull/426)] * Cache certain GitHub URLs [[#385](https://github.com/wp-cli/extension-command/pull/385)] ###### [wp-cli/i18n-command](https://github.com/wp-cli/i18n-command/) * Convert PHPUnit deprecations to exceptions [[#413](https://github.com/wp-cli/i18n-command/pull/413)] * `make-pot`: scan any `theme.json` file in any level [[#424](https://github.com/wp-cli/i18n-command/pull/424)] * Add ability to pass extensions to `make-json` command [[#439](https://github.com/wp-cli/i18n-command/pull/439)] * Update schema fallback files [[#431](https://github.com/wp-cli/i18n-command/pull/431)] * `make-json`: Add new `--domain` argument [[#430](https://github.com/wp-cli/i18n-command/pull/430)] * `update-po`: merge `X-Domain` header [[#429](https://github.com/wp-cli/i18n-command/pull/429)] * Add `php-format` and `js-format` flags [[#428](https://github.com/wp-cli/i18n-command/pull/428)] ###### [wp-cli/language-command](https://github.com/wp-cli/language-command/) * Mention `site switch-language` in readme [[#159](https://github.com/wp-cli/language-command/pull/159)] * Allow filtering languages by multiple statuses [[#162](https://github.com/wp-cli/language-command/pull/162)] ###### [wp-cli/php-cli-tools](https://github.com/wp-cli/php-cli-tools/) * Example code: remove use of `E_STRICT` [[#175](https://github.com/wp-cli/php-cli-tools/pull/175)] * Fix implicitly nullable parameters [[#173](https://github.com/wp-cli/php-cli-tools/pull/173)] * Replace tabs in tables with 4 spaces [[#181](https://github.com/wp-cli/php-cli-tools/pull/181)] * Properly handle line breaks in column value [[#179](https://github.com/wp-cli/php-cli-tools/pull/179)] * Support line breaks and tab replacement in tabular table values [[#182](https://github.com/wp-cli/php-cli-tools/pull/182)] * Fix removal of trailing tab / whitespace in tabular table [[#184](https://github.com/wp-cli/php-cli-tools/pull/184)] * Avoid deprecation warnings in newer PHP [[#185](https://github.com/wp-cli/php-cli-tools/pull/185)] ###### [wp-cli/rewrite-command](https://github.com/wp-cli/rewrite-command/) * Improve warning message in `rewrite flush` [[#69](https://github.com/wp-cli/rewrite-command/pull/69)] ###### [wp-cli/scaffold-command](https://github.com/wp-cli/scaffold-command/) * Convert PHPUnit deprecations to exceptions [[#348](https://github.com/wp-cli/scaffold-command/pull/348)] * Add dependency checks and error handling for `svn` and download tools [[#345](https://github.com/wp-cli/scaffold-command/pull/345)] * Accept Bitbucket as valid CI in `scaffold plugin` [[#340](https://github.com/wp-cli/scaffold-command/pull/340)] * Update Bitbucket CI [[#339](https://github.com/wp-cli/scaffold-command/pull/339)] * Update templates for child theme scaffolding [[#342](https://github.com/wp-cli/scaffold-command/pull/342)] * Update custom post type and taxonomy scaffolding [[#341](https://github.com/wp-cli/scaffold-command/pull/341)] * Update GitLab CI configuration file [[#338](https://github.com/wp-cli/scaffold-command/pull/338)] * Remove `grunt` from plugin scaffolding [[#337](https://github.com/wp-cli/scaffold-command/pull/337)] ###### [wp-cli/shell-command](https://github.com/wp-cli/shell-command/) * Add missing `do` construct [[#68](https://github.com/wp-cli/shell-command/pull/68)] ###### [wp-cli/wp-config-transformer](https://github.com/wp-cli/wp-config-transformer/) * Add read-only option for `WPConfigTransformer` [[#54](https://github.com/wp-cli/wp-config-transformer/pull/54)] * Add a `branch-alias` for `dev-main` [[#55](https://github.com/wp-cli/wp-config-transformer/pull/55)] * Deletion of constants deletes more lines than expected [[#53](https://github.com/wp-cli/wp-config-transformer/pull/53)] ##### Contributors [@9ete](https://github.com/9ete), [@amirhmoradi](https://github.com/amirhmoradi), [@baizmandesign](https://github.com/baizmandesign), [@benjaminprojas](https://github.com/benjaminprojas), [@BhargavBhandari90](https://github.com/BhargavBhandari90), [@cliffordp](https://github.com/cliffordp), [@daalderp](https://github.com/daalderp), [@dac514](https://github.com/dac514), [@danielbachhuber](https://github.com/danielbachhuber), [@dd32](https://github.com/dd32), [@dkoston](https://github.com/dkoston), [@dlind1](https://github.com/dlind1), [@drzraf](https://github.com/drzraf), [@elenachavdarova](https://github.com/elenachavdarova), [@ernilambar](https://github.com/ernilambar), [@gedex](https://github.com/gedex), [@gitlost](https://github.com/gitlost), [@greatislander](https://github.com/greatislander), [@herregroen](https://github.com/herregroen), [@i-am-chitti](https://github.com/i-am-chitti), [@iDschepe](https://github.com/iDschepe), [@imrraaj](https://github.com/imrraaj), [@itsmekopila](https://github.com/itsmekopila), [@janw-me](https://github.com/janw-me), [@jenkoian](https://github.com/jenkoian), [@jkrrv](https://github.com/jkrrv), [@jrfnl](https://github.com/jrfnl), [@karthick-murugan](https://github.com/karthick-murugan), [@l3ku](https://github.com/l3ku), [@localheinz](https://github.com/localheinz), [@marksabbath](https://github.com/marksabbath), [@matiasbenedetto](https://github.com/matiasbenedetto), [@matzeeable](https://github.com/matzeeable), [@meszarosrob](https://github.com/meszarosrob), [@michaelw85](https://github.com/michaelw85), [@michaelzangl](https://github.com/michaelzangl), [@mostafasoufi](https://github.com/mostafasoufi), [@mrsdizzie](https://github.com/mrsdizzie), [@oandregal](https://github.com/oandregal), [@ocean90](https://github.com/ocean90), [@ouikhuan](https://github.com/ouikhuan), [@PARTHVATALIYA](https://github.com/PARTHVATALIYA), [@pbiron](https://github.com/pbiron), [@peterwilsoncc](https://github.com/peterwilsoncc), [@petitphp](https://github.com/petitphp), [@pfefferle](https://github.com/pfefferle), [@pmbaldha](https://github.com/pmbaldha), [@ponsfrilus](https://github.com/ponsfrilus), [@pwtyler](https://github.com/pwtyler), [@ramonjd](https://github.com/ramonjd), [@rodrigoprimo](https://github.com/rodrigoprimo), [@Roy-Orbison](https://github.com/Roy-Orbison), [@saas786](https://github.com/saas786), [@sabithahmd](https://github.com/sabithahmd), [@sdnunca](https://github.com/sdnunca), [@shendy-a8c](https://github.com/shendy-a8c), [@shreya0204](https://github.com/shreya0204), [@siliconforks](https://github.com/siliconforks), [@strarsis](https://github.com/strarsis), [@swissspidy](https://github.com/swissspidy), [@todeveni](https://github.com/todeveni), [@Tug](https://github.com/Tug), [@tyrann0us](https://github.com/tyrann0us), [@wojsmol](https://github.com/wojsmol), [@wpeople-dev](https://github.com/wpeople-dev), [@WPprodigy](https://github.com/WPprodigy), [@yousan](https://github.com/yousan) [#release](https://make.wordpress.org/cli/tag/release/), [#v2-12-0](https://make.wordpress.org/cli/tag/v2-12-0/), WP-CLI v2.12.0 Release Notes, WP-CLI, 01jtnkjc32mjcvp8xhvrjk44hf.