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