# 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-hk -->