# WP-CLI v0.23.0  发行说明

*Published:* 2016-03-22
*Author:* 壳壳虫

很难相信上次 WP-CLI[3](#dd9c8d3e) 发布只有两个月，因为这是我写过的发布文章中最长的一篇。提前致以歉意。

如果你没能阅读全文，这是关于 WP-CLI v0.23.0 你绝对需要知道的：

- 此版本包括与 WordPress 4.5 兼容性。较旧的 WP-CLI 版本与 WordPress 4.5 不兼容。如果你计划在将来使用 WordPress 4.5，你需要在这之前升级。
- 现在你可以使用 `wp package browse` 浏览可用的软件包，并用 `wp package install` 安装它们。尝试 `wp package install runcommand/db-ack`。
- 有许多新的工具来注册命令。不再需要扩展 `WP_CLI_Command`。查看命令手册以了解更多信息。
- 所有维基页面已经迁移到网站上的文档门户，包括新页面，记录了你可以在自己的命令中使用的内部 API。鼓励提交拉取请求。

现在我已经透露了所有的惊喜，让我们继续发布文章。

哦，天哪，我忘记了另外两件事：

- 对于那些使用 Phar 文件的人，这应该是你们大多数人，WP-CLI 现在会自动检查更新，并在适用时提示你进行更新。甚至对于使用夜间构建版本的人也有效。这个行为是可配置的，下文有详细信息。
- 我已经决定以 runcommand 为我的新 WP-CLI 企业命名。在网站上注册电子邮件以获得更新，或者在 Twitter 上关注 @runcommand。

现在，让我们继续发布文章。

### WordPress 4.5 兼容性

WordPress 4.5 在 `wp-settings.php` 中加载了另一个文件。由于 WP-CLI 有一个自定义的 wp-settings-cli.php，WP-CLI v0.23.0 是唯一与 WordPress 4.5 兼容的版本。

**重要的是，由于这些变更的性质，WP-CLI 0.23.0 之前的版本将与 WordPress 4.5 不兼容。**

查看这个拉取请求中的变更性质。

想要帮助修复这个问题吗？重新倒一杯咖啡，然后深入阅读 WordPress Trac[7](#1b92f811) 上的 #34936 讨论。

### 从软件包索引安装社区命令

考虑以下情况 (#2523)：

> 使用 `theme list` 命令，没有 `--url` 参数显示主题是否启用于网络并在默认站点中处于活动状态。
> 
> 如果你传递网络的站点的 `--url`，该命令将显示该站点中的主题是否活动。
> 
> 但是我找不到一种列出网络中每个站点中不活动主题的方法，以便我可以安全地禁用并删除它们，我很愿意拥有这个功能

如果你必须使用 WordPress 网络管理员完成这项任务，那可能需要你数小时，甚至数天。而仅仅编写用于解决这个问题的 WP-CLI 命令仅花费了我 3 分钟（runcommand/find-unused-themes）。WP-CLI 确实是管理 WordPress 最快捷的接口。

WP-CLI 通常在决定是否引入新功能时遵循 80/20 规则。如果该功能对大多数人可能有用，那可能会引入；否则，可能不会。那 20% 不应该被遗留下来，尤其是当涉及到真正有用的命令时。

今天，我很自豪地重新引入了软件包索引，这是由社区维护的 WP-CLI 软件包的目录。浏览可用的包以安装它们，使用 `wp package browse`（文档）。一旦找到你需要的解决方案，就可以使用 `wp package install`（文档）进行安装：

```
$ wp package install runcommand/find-unused-themes
正在安装 runcommand/find-unused-themes (dev-master)
更新 /home/vagrant/.wp-cli/packages/composer.json 以需要该软件包...
使用 Composer<sup class="fn" data-fn="21ebb574"><a href="#21ebb574" id="21ebb574-link">1</a></sup> 安装该软件包...
---
从包信息中加载 composer 仓库
更新依赖关系
分析 2223 个软件包以解析依赖关系
分析 29243 条规则以解析依赖关系
 - 正在安装软件包
正在写入锁文件
生成自动加载文件
---
成功：软件包安装成功。
$ wp find-unused-themes
正在检查 http://wordpress-develop.dev/ 中未使用的主题...
正在检查 http://wordpress-develop.dev/foo/ 中未使用的主题...
+----------------+---------+
| 名称           | 版本    |
+----------------+---------+
| 默认           | 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     |
+----------------+---------+

```

相当酷，对吧？请注意，WP-CLI 的软件包管理在这个时候被视为测试版功能。你可能会遇到一些尚未报告的问题，或者发现一个尚未报告的错误。如果你有兴趣深入研究 Composer 的内部工作，帮助改进 `wp package` 将是一个很好的开始。

与 `wp package` 相关的拉取请求包括 #2442、#2460、#2491、#2512、#2514、#2533、#2534、#2537、#2540、#2543、#2546、#2547、#2555、#2561。

### 注册更多命令

有没有想过为什么在编写自己的命令时需要扩展 `WP_CLI_Command`？实际上，你不需要这样做。

实际上，`WP_CLI::add_command()`（文档）现在支持将任意可调用对象注册为 WP-CLI 命令。例如，这里有一个用于重置一个或多个用户密码的闭包命令（runcommand/reset-passwords）：

```
/**
 * 为一个或多个 WordPress 用户重置密码。
 *
 * &lt;user&gt;...
 * : 指定一个或多个用户登录名或 ID。
 */
$reset_password_command = function( $args ) {
    $fetcher = new WP_CLIFetchersUser;
    $users = $fetcher-&gt;get_many( $args );
    foreach( $users as $user ) {
        wp_update_user( array( 'ID' =&gt; $user-&gt;ID, 'user_pass' =&gt; wp_generate_password() ) );
        WP_CLI::log( ""为 {$user-&gt;user_login} 重置密码。"" );
    }
    WP_CLI::success( '密码已重置。' );
};
WP_CLI::add_command( 'user reset-passwords', $reset_password_command );

```

想要在命令之间重用参数定义吗？现在，你可以将命令概要作为 `WP_CLI::add_command()` 的第三个参数进行注册（runcommand/hook）：

```
WP_CLI::add_command( 'hook', $hook_command, array(
    'shortdesc' =&gt; '列出已注册给定操作或筛选器的回调。',
    'synopsis' =&gt; array(
        array(
            'name'        =&gt; 'hook',
            'type'        =&gt; 'positional',
            'description' =&gt; '操作或筛选器的键。',
        ),
        array(
            'name'        =&gt; 'format',
            'type'        =&gt; 'assoc',
            'description' =&gt; '将回调列为表、JSON<sup class="fn" data-fn="a08266a2"><a href="#a08266a2" id="a08266a2-link">5</a></sup> 或 CSV。',
            'optional'    =&gt; true,
            'options'     =&gt; array( 'table', 'json', 'csv' ),
            'default'     =&gt; 'table',
        ),
    ),
) );

```

请注意 `format` 的默认参数属性。WP-CLI 接受参数注册的一部分，以使处理用户输入更容易。这些属性还可以在可调用的 PHPDoc 中定义：

```
/**
 * 列出已注册给定操作或筛选器的回调。
 *
 * &lt;hook&gt;
 * : 操作或筛选器的键。
 *
 * [--format=&lt;format&gt;]
 * : 将回调列为表格、JSON 或 CSV。
 * ---
 * options:
 *   - table
 *   - json
 *   - csv
 * default: table
 * ---
 */
$hook_command = function( $args, $assoc_args ) {

```

查看命令手册，深入了解命令注册。与 `WP_CLI::add_command()` 的这些改进相关的拉取请求包括 #2373、#2389、#2398、#2409、#2556、#2559。

### 更多、更好、更易找到的文档

实际上很难想象以前人们是如何操作的。以下是文档领域的变化：

- 维基已经以网站上的文档门户的形式重生。当我将它们搬到新位置时，我花了时间整理页面，希望你会发现新的命令手册非常有帮助。
- 现在公开记录了你可以在自己的命令中使用的内部 API。内部 API 页面是从代码库生成的，这应该极大地帮助维护工作。
- 在每个命令页面上，都有一个“Github 问题”链接，以便更容易找到给定命令的所有未解决和已解决问题。例如，这是所有关于 `wp package` 及其子命令的未解决问题。请注意，这不一定是精确的，因为我没有回顾所有时间的所有问题。随着时间的推移，这个功能将变得更加有用。

与文档改进相关的拉取请求包括 #2454、#2487、#2494、#2499、#2507、#2513、#2515。

### 自动更新检查

对于那些使用 WP-CLI 作为 Phar 文件的人，这应该是大多数人，版本 0.23.0 及更高版本将自动检查更新。如果发现更新，您将被提示安装。

即使对于那些使用夜间构建的人，自动更新检查也能正常工作！使用 `wp cli update --nightly` 在每个 主要发布版本 后返回到夜间版本。

默认情况下，自动更新检查将每天运行一次，适用于具有可写权限的 WP-CLI Phar 文件的用户。分发文件或目录不可写？那么检查将不会运行。自动更新检查在用户运行 `wp help <some-command>` 时览发，而不是在脚本运行时触发。此频率可以使用 `WP_CLI_AUTO_CHECK_UPDATE_DAYS` 环境变量进行配置，也可以使用 `WP_CLI_DISABLE_AUTO_CHECK_UPDATE` 环境变量来完全禁用。

此功能的相关拉取请求包括 #2536 和 #2538。

### 0.23.0 中的其他内容

命令改进：

- 通过仅获取所需的数据，提高了 `wp (user|post) list --format=count` 的性能 \[#2370, #2387\]。
- 在 `wp scaffold plugin-tests` 中使用 Travis 默认设置时，防止重复构建 \[#2377\]。
- 使用 `wp comment generate --post_id=<post-id>` 为特定帖子生成评论 \[#2388\]。
- 在使用 `wp core (update|download) --force` 时，清理了上个版本的文件 \[#2382, #2406, #2413, #2432\]。
- 在 `wp cron event run` 中为个别事件添加了计时器 \[#2437\]。
- 引入了 `wp term meta` 以管理术语 元数据 \[#2444\]。
- 为 `wp (theme|plugin) update` 添加了 CSV 和 JSON 输出格式 \[#2452\]。
- 使用 `wp core download` 验证下载的存档文件的 MD5 哈希值 \[#2461\]
- 在 `wp core verify-checksums` 中完全避免加载 WordPress \[#2459\]。
- 支持使用 `wp site empty` 清空术语元数据 \[#2506\]。
- 向 `scaffold (post-type|taxonomy)` 添加 WP REST API[2](#dd6670c0) 注册参数 \[#2551\]。
- 在运行 `wp scaffold plugin-tests` 时，为 `test-sample.php` 和 `bootstrap.php` 添加了文档 \[#2577, #2578\]。

框架增强：

- 将 `WP_CLI::confirm()` 切换为自动将响应转换为小写，允许使用 `Y` 或 `y` \[#2366\]。
- 在 WP 加载过程中，添加了 `(before|after)_wp(_config)_load` 钩子，允许通过 `--require` 注入的代码在引导过程中进行修改 \[#2375\]。
- 根据 WordPress 编码标准，在项目根目录中添加了 `.editorconfig` \[#2395\]。
- 在 `WP_CLI::error_to_string()` 中将 `WP_Error` 数据编码为 JSON，以便数据实际上是可读的 \[#2397\]。
- 在 `WP_CLI::error()` 中支持自定义退出代码 \[#2440\]。
- 引入了 `--format=yaml` 以轻松显示数据为 YAML[6](#8d38d608) \[#2453\]。
- 支持配置深度合并和继承 \[#2496\]。
- 更新 Composer 依赖项 \[#2554\]

各方面的错误修复：

- 在 `bin/install-wp-tests.sh` 中，在下载并设置 `wp-tests-config.php` 之前不要进入 `WP_TESTS_DIR` 目录 \[#2371\]。
- 使用 `--prompt` 时，现在只会提示执行线程中的第一个命令。以前，在命令中使用 `WP_CLI::run_command()` 会导致提示 UX[9](#1b9d53ac) 再次出现 \[#2400\]。
- 在成功之前不要在 `wp theme activate` 上离开 \[#2412\]。
- 在列出术语之前检查是否存在 分类 \[#2414\]。
- 在尝试更新不存在的 核心 版本时，在尝试解压无效存档之前检查 HTTP[4](#56f00913) 响应代码 \[#2368\]。
- 修复了 `wp server` 在 PHP[8](#798d2fdb) 二进制文件包含空格时的问题 \[#2422\]。
- 对 `wp export` 的 `--skip_comments` 标志进行了修复，这个问题已经存在了很长时间 \[#2427\]
- 在缺少标题或说明时在 `wp media import` 中保留 IPTC 数据；从默认标题中移除扩展名 \[#2438, #2466\]。
- 在更新主题或插件时禁用检查翻译更新 \[#2439\]。
- 在 multisite 上创建新用户时修正了参数序列顺序 \[#2443\]。
- 在 `--format=table` 时正确处理自动着色 \[#2458\]。
- 使用核心的版本检查 API 查找更新，这为我们提供了确切的下载链接 \[#2469\]。
- 在 `wp cli update` 中使用更稳健的下载失败检查 \[#2488\]。
- 在核心尚未安装时，提前运行 `wp core` 命令的帮助 \[#2497\]。
- 修复了当命令具有子命令时全局参数的格式 \[#2516\]。
- 在 `wp search-replace` 中正确处理多列键 \[#2531\]。
- 当将 WP-CLI 安装到父 Composer 项目时，使用正确的自动加载程序路径 \[#2550\]。
- 将字段正确传递给 `plugins_api()` 请求的 `wp plugin search`；添加 `page` 参数 \[#2570, #2571\]。
- 在 `wp theme status` 中添加了 `parent` 作为潜在状态 \[#2573\]

贡献者：anantshri, danielbachhuber, edueo, GaryJones, gilbitron, hina, hinoue-work, jacobischwartz, marco-c, markjaquith, markkimsal, mbovel, ottok, rodrigoprimo, sourcerer-mike, staude, szepeviktor, za-creature

您可以在 Github 上浏览已解决问题的完整列表。

### 名词解释

1. Composer：PHP 的依赖管理工具 [↩︎](#21ebb574-link)
2. REST API：基于 HTTP 的应用程序接口 [↩︎](#dd6670c0-link)
3. WP-CLI：WordPress 的命令行管理工具 [↩︎](#dd9c8d3e-link)
4. HTTP：超文本传输协议，浏览器和服务器通信的基础协议 [↩︎](#56f00913-link)
5. JSON：一种轻量级的数据交换格式 [↩︎](#a08266a2-link)
6. YAML：一种易读的数据序列化格式，常用于配置文件 [↩︎](#8d38d608-link)
7. Trac：WordPress 使用的项目管理和缺陷追踪系统 [↩︎](#1b92f811-link)
8. PHP：WordPress 核心使用的服务端编程语言 [↩︎](#798d2fdb-link)
9. UX：用户体验 [↩︎](#1b9d53ac-link)
<!-- WP Chinese Converter Full Page Converted. Target Lang: zh-sg -->