如何將 WP-CLI 支持添加到任何 WordPress 插件
已發表: 2018-08-14根據用戶的需求調整插件是每個插件所有者必須遵循的主要議程之一。 對於意味著更多顏色選擇器、字體和類似視覺選項的首頁滑塊。 但是,如果您遲早要滿足開發人員、管理員和其他高級用戶的需求,他們將需要 CLI 支持。 他們會想要放棄鼠標而只使用鍵盤。 感謝 WP-CLI 項目,為您的插件添加 CLI 支持是小菜一碟。
通過將@wpcli 支持添加到您的#WordPress 插件,您將向開發人員、高級用戶和管理員開放它。
點擊推文永恆的 GUI 與 CLI 之戰
讓我們解決一些問題:GUI(圖形用戶界面)並不比 CLI(命令行界面)好,反之亦然:CLI 並不比 GUI 好。 人們更喜歡其中之一。 這是個人喜好或習慣的問題。 “它們是一樣的嗎,它們可以互換嗎?” 有一些妥協,是的,他們可以,但是,沒有人喜歡在黑白命令行界面中選擇顏色。 這簡直適得其反。 他們每個人都有一個特定的目的。
“那為什麼我們兩個都需要? WP 不是更面向 GUI 嗎?” 是的,WP 更面向 GUI。 但不適用於所有用戶。 有些人以更適合 CLI 的方式使用 WP,它使他們能夠更快地使用它。 此外,為什麼不兩者兼得? 它不會膨脹任何東西或妨礙。
所以,WP-CLI 是一個插件,對吧?
不,它不是插件。 您無需在 WordPress 安裝中添加任何內容即可使 WP-CLI 正常工作。 您只需要操作系統上的 WP-CLI。 WP-CLI 是用 PHP 編寫的,並打包在一個 phar 中。 這是一種將整個 PHP 應用程序放入單個文件的方法,即“phar”(PHP 存檔),以便在各種操作系統之間輕鬆分發和安裝。 安裝過程取決於您的操作系統,但它很容易並且在 WP-CLI 手冊中有詳細記錄 - 或者如果您更喜歡視頻,這裡是 Windows 上的 WP-CLI 安裝之一。
我不會重複上面的任何材料。 它足夠詳細,應該可以讓您在幾分鐘內開始使用 WP-CLI。 當您運行它時,將您的工作目錄更改為您計劃使用的 WP 安裝並運行wp option get home
以確保您在正確的 WP 安裝上並且 WP-CLI 可以正常工作。

它比看起來更簡單
首先,我們需要一個函數來告訴我們用戶是否通過 CLI 與 WP 進行交互。 它對於許多事情都很有用,例如在 CLI 中不發送任何 HTTP 標頭以及在“常規”調用中不包含 CLI 函數。 它還使我們有機會重用最初為 GUI 編寫的舊功能,只需進行一些小改動。
function is_cli_running() { return defined( 'WP_CLI' ) && WP_CLI; }
下一步是確定 CLI 命令的名稱。 大約有 40 個內置命令。 因此,您不能使用這些名稱中的任何一個,並且您應該遠離任何品牌名稱,例如“google”,因為您可能不擁有 Google。 理想情況下,它應該是插件的名稱或它所執行的一組功能的總稱,以便您可以將所有命令放在該名稱下,以免污染主命名空間。 這是常識,就像任何一段代碼一樣。 讓我們使用site-info
,我們將創建一些函數來返回有關站點的各種信息。
為了保持整潔,將所有與 WP-CLI 相關的代碼放入一個新文件custom-wp-cli-commands.php
。 我們只會在需要並且所有 CLI 相關代碼都可用時才包含該文件。 為此,我們將使用我們剛剛構建的函數。 為了測試和學習,將文件放在活動主題的文件夾中,然後將其添加到主題的functions.php
文件中。
if ( is_cli_running() ) { require_once 'custom-wp-cli-commands.php'; }
然後,把它放在custom-wp-cli-commands.php
;
/** * Just a few sample commands to learn how WP-CLI works */ class cli_site_info extends WP_CLI_Command { /** * Display version information. * ## OPTIONS * * [--wponly] * : Shows only WP version info, omitting the plugin one. */ function version( $args, $assoc_args ) { if ( !empty( $assoc_args['wponly'] ) ) { WP_CLI::line( 'Version of WordPress is ' . get_bloginfo( 'version' ) . '.' ); } else { WP_CLI::line( 'Version of this plugin is 0.1-beta, and version of WordPress ' . get_bloginfo( 'version' ) . '.' ); } } /** * Display the number of plugins. */ function plugins() { WP_CLI::line( 'There are a total of ' . sizeof( get_plugins() ) . ' plugins on this site.' ); } } WP_CLI::add_command( 'site-info', 'cli_site_info' );
如果您在瀏覽器中打開站點、主頁或管理員,則不會發生任何事情。 那挺好的。 要測試新的 CLI 命令,請返回命令行窗口,運行wp site-info version
,您將獲得插件和站點版本。 或運行wp site-info plugins
,您將獲得網站上的插件總數。 容易,對吧? 讓我們回顧一下代碼。

就像擴展一個 PHP 類一樣簡單
我們的cli_site_info
類擴展了WP_CLI_Command
類; 那裡沒什麼好看的。 你可以隨意調用類。 重要的是文件最後一行的代碼WP_CLI::add_command( 'site-info', 'cli_site_info' )
。 它註冊我們的頂級命令並將我們的類與它聯繫起來。 如果您想將site-info
命令更改為其他內容,可以在這裡進行。
類中的每個公共方法(函數)都是 WP-CLI 中的子命令。 請務必查看命令的結構以了解正確的 WP-CLI 術語。 無需在任何地方“註冊”該方法或做任何額外的事情。 就像我們對plugins()
和version()
所做的那樣——創建一個標準函數,就是這樣。 WP-CLI 會知道如何處理它。
進入該方法後,您可以運行所需的任何代碼。 但是,與 CLI 交互將需要一些自定義函數,因為echo
之類的功能無法按預期工作。 代替echo
的是WP_CLI::line()
。 內部 WP-CLI API 涵蓋了您需要的一切,所有功能都有很好的文檔記錄,並分為輸入、輸出、雜項、系統和其他類別,這使得它們非常容易找到。
除了打印文本之外,您可能還想使用(關聯)命令參數,這樣您就可以調用諸如wp site-info version --wponly
(試一試)之類的東西,它只輸出 WP 版本信息。 關聯參數存儲在方法的第二個函數參數中。 在我們的例子中,它被稱為$assoc_args
。 唯一剩下的就是測試數組鍵的特定值並相應地調整代碼,就像我們在function version( $args, $assoc_args )
中所做的那樣。
文檔和 CLI 內幫助
WP-CLI 有一個內置的幫助系統。 這很方便。 如果開發人員花一點時間在他的代碼中描述命令,則永遠不需要任何外部文檔。 文檔不會自己編寫(不幸的是),但如果您在創建命令時投入最低限度,用戶將永遠感激不盡,因為您將所有文檔放在一個屋簷下。
您使用 PHPDoc 格式將課堂中的文檔作為註釋編寫。 如需深入了解,請查看 CLI 手冊。 通過運行wp help site-info
,您將獲得我們的子命令的列表和描述,如果您查看代碼,您會看到它的來源。 非常不言自明。 有關 version 子命令的更多詳細信息,請運行wp help site-info version
,您還將獲得有關選項的詳細信息。
雖然沒有被很多人使用,但@wpcli 經常被那些塑造#WordPress 的未來和許多用戶意見的人使用。 將 CLI 添加到您的插件可能是明智之舉
點擊推文讓您的用戶滿意
當然,如果您正在開發天氣小部件,則添加 WP-CLI 支持聽起來不是正確的舉措。 但是,頑固的開發人員和管理員使用的任何工具(例如 WP Reset)都將從 WP-CLI 中受益匪淺。 用戶將能夠鏈接命令、編寫 bash 腳本,並且通常可以更快、更輕鬆地完成更多事情。 這會帶來更好的評論、更快樂的用戶、更多的用戶,最終為你帶來更多的錢,無論你採用何種貨幣化模式。