Howdy:使用現代PHP概念另闢蹊徑高效率開發WordPress外掛

Howdy:使用現代WordPress外掛模板另闢蹊徑

WordPress 是一個使用 PHP 構建的流行部落格平臺,其可擴充套件性是它最大的優勢之一。只需將一個 PHP 檔案放到 wp-content/plugins 目錄中,就可以建立一個外掛,但多年來,WordPress 外掛的廣泛開發實踐並沒有太大發展–即使 PHP 本身已經有了很大改進。

隨著新功能和新語法的出現,PHP 也發生了很大變化。例如,它現在包含了更好、更合適的 OOP 功能和自動載入功能。然而,WordPress 仍然在推廣舊的程序式程式設計方法,要在外掛中加入自動載入功能並不簡單。

這就是 Howdy 誕生的原因,這是一個 WordPress 外掛模板,旨在讓 WordPress 外掛開發中使用現代 PHP 概念變得更容易。

範圍

Howdy 專注於提高工作效率的基本工具,而不會使工作流程過於複雜。它並不強求所有現代 PHP 實踐,而是優先考慮兩個基礎功能:

名稱間距

PHP 中的名稱間距將類、函式和常量組織成邏輯組,類似於資料夾的檔案結構,以防止命名衝突。例如,兩個定義了 Security 的外掛如果各自使用唯一的名稱空間,就不會發生衝突。

傳統上,WordPress 依靠字首來實現隔離。假設您的外掛名為“Simple Security by Acme”。您通常會在函式和類的字首中使用您的組織名稱 Acme_acme_

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// Prefix in a function name.
function acme_check_security() {
// Add security check logic here
}
// Prefix in a class name.
class Acme_Security {
public function check() {
// Add class-specific logic here
}
}
// Prefix in a function name. function acme_check_security() { // Add security check logic here } // Prefix in a class name. class Acme_Security { public function check() { // Add class-specific logic here } }
// Prefix in a function name.
function acme_check_security() {
// Add security check logic here
}
// Prefix in a class name.
class Acme_Security {
public function check() {
// Add class-specific logic here
}
}

雖然名稱空間可以在 WordPress 外掛中使用,但採用的情況仍然很少。這是因為如果沒有自動載入,就無法充分發揮名稱空間的潛力。

自動載入

在 WordPress 中自動載入類有兩個主要限制。

首先,你不能自動載入第三方庫(如 openai-php/client),而不為其名稱空間新增字首。如果兩個外掛載入相同的庫,衝突的定義會導致網站崩潰。

此外,如果不使用 Composer,所有函式、常量或靜態檔案都必須使用 require_once 手動載入,從而增加了模板。

這就是 Howdy 要解決的兩個主要問題。

一旦我們正確設定了這兩項功能,採用其他高階 PHP 模式(如依賴注入Facades)就會變得容易得多。

讓我們安裝 Howdy,看看它的實際效果吧。

安裝

我們可以使用 Composer 的 create-project 命令安裝 Howdy:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
composer create-project syntatis/howdy -s dev
composer create-project syntatis/howdy -s dev
composer create-project syntatis/howdy -s dev

該命令將建立一個新目錄howdy,提取所有專案檔案,並安裝 Packagist 的依賴項。

如果想在其他資料夾中建立專案,可以在命令末尾新增目錄名,如下所示:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
composer create-project syntatis/howdy -s dev acme-plugin
composer create-project syntatis/howdy -s dev acme-plugin
composer create-project syntatis/howdy -s dev acme-plugin

然後,它會要求您輸入外掛別名 slug。外掛別名是必填項,並且應該是唯一的。如果您計劃在 WordPress.org 上釋出您的外掛,則外掛 URL 中將使用此標籤,例如https://wordpress.org/plugins/{slug}/ 。在本例中,我們將使用 acme-plugin

外掛別名 slug

外掛別名還將用於確定預設外掛名稱、名稱空間字首等。正如我們在下文中看到的,它可以很聰明地將 slug 轉換為適當的格式。在本例中,我們將保留預設外掛名稱,同時將名稱空間從AcmePlugin 更改為 Acme

將名稱空間從AcmePlugin 更改為 Acme

輸入完成後,會對專案檔案進行必要的更新。例如,app/Plugin.php中的檔案將包含名稱空間和依賴項名稱空間的字首。

對專案檔案進行必要的更新

包括哪些內容?

Howdy 預裝了這些工具,以簡化開發:

  • PHP-Scoper:它允許我們為使用 Composer 安裝的依賴項新增字首,以防止使用相同庫時發生衝突。
  • PHPCS:它包含 PHPCS,但不使用 WordPress 編碼標準,而是應用 PHP 生態系統中成熟的現代編碼標準,如 PSR-12Doctrine 和 Slevomat
  • Kubrick:React.js 元件集,用於構建類似 WordPress 管理器中設定頁面的應用程式。
  • @wordpress/scripts:用於編譯 JavaScript 和樣式表。你可以執行以下命令開始監視檔案並自動編譯更改: npm run start

目錄結構

對於 WordPress 外掛來說,Howdy使用的是一種略顯非傳統的結構。不過,如果你熟悉 LaravelSymfony 等框架,很快就能適應。

有三個主要目錄

  1. app: 這個目錄應該存放外掛的核心類和業務邏輯。如果該目錄下的類遵循 PSR-4 標準,則會自動載入。
  2. inc: 該目錄包含配置檔案、實用程式和 HTML 模板。
  3. src:該目錄包含 JavaScript 和樣式表檔案的未編譯原始碼。

安裝外部依賴

既然我們已經設定了外掛模板,就可以使用 Composer 輕鬆安裝其他軟體包。例如,如果我們想構建一個整合 OpenAI 的外掛,可以使用以下命令安裝 openai-php/client 包:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
composer require openai-php/client
composer require openai-php/client
composer require openai-php/client

安裝後,Howdy 會自動為該軟體包中所有類的名稱空間新增字首。

你還可以安裝專門用於開發的軟體包。例如,要安裝 symfony/var-dumper,一個用於除錯的流行 PHP 軟體包,可以執行:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
composer require symfony/var-dumper --dev
composer require symfony/var-dumper --dev
composer require symfony/var-dumper --dev

與 PHP 本地的 var_dump 函式相比,該軟體包提供了更友好的除錯體驗。

更友好的除錯體驗

準備釋出

最後,Howdy 提供了幾條命令來準備釋出外掛:

npm run build:構建 src 目錄中的所有資產檔案,包括 JavaScript 和樣式表。這些檔案將經過優化和最小化,以用於生產。

composer run build:重新編譯專案並刪除為開發而安裝的軟體包。

composer run plugin:zip:為外掛建立可安裝的 ZIP 檔案。在最終壓縮包中,會排除一些不必要的檔案,如 dotfiles、src 目錄和 node_modules

小結

在本文中,我們探討了 Howdy 及其對 WordPress 外掛開發的益處。

Howdy 旨在實現外掛開發的現代化,但又不會讓您不知所措。它避免了用各種時髦工具臃腫您的工作流程(例如,預設情況下不包括 PHPUnit、PHPStan 或 TypeScript),但您可以在以後根據需要新增它們。

通過解決依賴衝突和啟用 Composer,Howdy 為 WordPress 開發與更廣泛的 PHP 生態系統搭建了橋樑,為構建可維護、可擴充套件的外掛提供了無數可能性。

評論留言