WP-CLI v0.23.0 发行说明

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

如果你没能阅读全文,这是关于 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 上的 #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 安装该软件包...
---
从包信息中加载 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 用户重置密码。
 *
 * <user>...
 * : 指定一个或多个用户登录名或 ID 。
 */
$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( ""为 {$user->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' => '列出已注册给定操作或筛选器的回调。',
    'synopsis' => array(
        array(
            'name'        => 'hook',
            'type'        => 'positional',
            'description' => '操作或筛选器的键。',
        ),
        array(
            'name'        => 'format',
            'type'        => 'assoc',
            'description' => '将回调列为表、 JSON 或 CSV 。',
            'optional'    => true,
            'options'     => array( 'table', 'json', 'csv' ),
            'default'     => 'table',
        ),
    ),
) );

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

/**
 * 列出已注册给定操作或筛选器的回调。
 *
 * <hook>
 * : 操作或筛选器的键。
 *
 * [--format=<format>]
 * : 将回调列为表格、 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 注册参数 [#2551] 。
  • 在运行 wp scaffold plugin-tests 时,为 test-sample.phpbootstrap.php 添加了文档 [#2577, #2578] 。

框架增强:

  • WP_CLI::confirm() 切换为自动将响应转换为小写,允许使用 Yy [#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 [#2453] 。
  • 支持配置深度合并和继承 [#2496] 。
  • 更新 Composer 依赖项 [#2554]

各方面的错误修复:

  • bin/install-wp-tests.sh 中,在下载并设置 wp-tests-config.php 之前不要进入 WP_TESTS_DIR 目录 [#2371] 。
  • 使用 --prompt 时,现在只会提示执行线程中的第一个命令。以前,在命令中使用 WP_CLI::run_command() 会导致提示 UX 再次出现 [#2400] 。
  • 在成功之前不要在 wp theme activate 上离开 [#2412] 。
  • 在列出术语之前检查是否存在 分类 [#2414] 。
  • 在尝试更新不存在的 核心 版本时,在尝试解压无效存档之前检查 HTTP 响应代码 [#2368] 。
  • 修复了 wp server 在 PHP 二进制文件包含空格时的问题 [#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 上浏览已解决问题的完整列表。

发表评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注