當(dāng)前位置:首頁>WordPress建站>WordPress開發(fā)>Howdy:一個(gè)現(xiàn)代化 WordPress 插件開發(fā)框架

Howdy:一個(gè)現(xiàn)代化 WordPress 插件開發(fā)框架

WordPress 作為一款基于 PHP 的流行建站平臺(tái),其強(qiáng)大的擴(kuò)展性是其核心優(yōu)勢。雖然只需在wp-content/plugins目錄放置單個(gè) PHP 文件即可創(chuàng)建插件,但多年來 WordPress 插件開發(fā)范式卻停滯不前——盡管 PHP 語言本身已實(shí)現(xiàn)跨越式發(fā)展。

PHP 近年來新增了諸多現(xiàn)代化特性,包括更完善的面向?qū)ο缶幊蹋∣OP)支持和自動(dòng)加載機(jī)制。然而,WordPress 生態(tài)仍以傳統(tǒng)的過程式編程為主流,在插件中實(shí)現(xiàn)自動(dòng)加載等功能仍存在障礙。

今天,WordPress大學(xué)和大家分享一個(gè)致力于簡化現(xiàn)代 PHP 開發(fā)流程的 WordPress 插件框架:Howdy

插件庫:https://github.com/syntatis/howdy

設(shè)計(jì)理念

Howdy WordPress Plugin Boilerplate Cover Image

Howdy專注于提高生產(chǎn)力而不會(huì)使工作流程過于復(fù)雜的基本工具。它不會(huì)強(qiáng)迫所有現(xiàn)代 PHP 實(shí)踐都采用它,而是優(yōu)先考慮兩個(gè)基本功能:

  • 命名空間
  • 自動(dòng)加載(使用Composer)

命名空間

PHP 中的命名空間將類、函數(shù)和常量組織成邏輯組,類似于文件夾結(jié)構(gòu)文件的方式,以防止命名沖突。例如,如果兩個(gè)插件定義一個(gè)Security類,則每個(gè)插件都使用唯一的命名空間,則不會(huì)發(fā)生沖突。

傳統(tǒng)上,WordPress 依靠前綴進(jìn)行隔離。假設(shè)您的插件名為“Simple Security by Acme”。您通常會(huì)在函數(shù)和類前加上組織名稱Acme_acme_

// 函數(shù)名稱中的前綴。
function acme_check_security () {
     // 在此處添加安全檢查邏輯
}

// 類名中的前綴。
class  Acme_Security {
     public function check () {
         // 在此處添加特定于類的邏輯。
    }
}

雖然命名空間可用于 WordPress 插件,但采用率仍然很低。這是因?yàn)槿绻麤]有自動(dòng)加載,就無法充分利用命名空間。

自動(dòng)加載

WordPress 中的自動(dòng)加載類有兩個(gè)主要限制。

首先,如果不給第三方庫(如openai-php/client)的命名空間添加前綴,則無法自動(dòng)加載它們。如果兩個(gè)插件加載同一個(gè)庫,沖突的定義會(huì)導(dǎo)致網(wǎng)站崩潰。

此外,如果不使用 Composer,所有函數(shù)、常量或靜態(tài)文件都必須手動(dòng)加載require_once,從而增加樣板。

這是Howdy想要解決的兩個(gè)主要問題。

一旦我們正確設(shè)置了這兩個(gè)功能,采用其他高級(jí) PHP 模式(例如依賴注入外觀)就會(huì)變得更加容易。

那么讓我們安裝 Howdy并觀察它的運(yùn)行。

安裝

我們可以使用 Composercreate-project命令安裝 Howdy:

composer create-project syntatis/howdy -s dev

此命令將創(chuàng)建一個(gè)新目錄,howdy提取所有項(xiàng)目文件,并從Packagist安裝依賴項(xiàng)。

如果要在不同的文件夾中創(chuàng)建項(xiàng)目,可以在命令末尾添加目錄名稱,如下所示:

composer create-project syntatis/howdy -s dev acme-plugin

然后它會(huì)要求您輸入插件 slug。插件 slug 是必需的,并且應(yīng)該是唯一的。如果您計(jì)劃在 WordPress.org 上發(fā)布您的插件,則此 slug 將用于插件 URL,例如https://wordpress.org/plugins/{slug}/。在本例中,我們將使用acme-plugin

在 Howdy 中提示輸入插件名稱

插件 slug 還將用于確定默認(rèn)插件名稱、命名空間前綴等。如下所示,它足夠智能,可以將 slug 轉(zhuǎn)換為適當(dāng)?shù)母袷健T诒纠校覀儗⒈A裟J(rèn)插件名稱,同時(shí)將命名空間更改為 而Acme不是AcmePlugin

在 Howdy 中提示輸入插件名稱和命名空間

輸入完成后,將對(duì)項(xiàng)目文件進(jìn)行必要的更新。例如,文件中將app/Plugin.php包含命名空間和依賴項(xiàng)命名空間的前綴。

Howdy 示例中的插件命名空間和前綴

預(yù)置工具

Howdy 預(yù)先配置了這些工具以簡化開發(fā):

  • PHP-Scoper:它允許我們?yōu)槭褂?Composer 安裝的依賴項(xiàng)添加前綴,以防止在使用相同庫時(shí)發(fā)生沖突。
  • PHPCS:它包含 PHPCS,但該庫不使用WordPress 編碼標(biāo)準(zhǔn),而是應(yīng)用 PHP 生態(tài)系統(tǒng)中已建立的現(xiàn)代編碼標(biāo)準(zhǔn),例如PSR-12 DoctrineSlevomat
  • Kubrick:React.js 組件的集合,用于構(gòu)建類似 WordPress 管理員中的設(shè)置頁面的應(yīng)用程序。
  • @wordpress/scripts:編譯 JavaScript 和樣式表。您可以運(yùn)行以下命令開始監(jiān)視文件并自動(dòng)編譯更改:npm run start

目錄結(jié)構(gòu)

Howdy使用了稍微不尋常的 WordPress 插件結(jié)構(gòu)。但是,如果您熟悉Laravel或Symfony等框架,那么您很快就會(huì)適應(yīng)。

主要有三個(gè)目錄:

  1. app:此目錄應(yīng)包含插件的核心類和業(yè)務(wù)邏輯。如果此目錄中的類符合PSR-4 標(biāo)準(zhǔn),則會(huì)自動(dòng)加載。
  2. inc:此目錄包含配置文件、實(shí)用程序和 HTML 模板。
  3. src:此目錄包含 JavaScript 和樣式表文件的未編譯源代碼。

安裝外部依賴項(xiàng)

現(xiàn)在我們已經(jīng)設(shè)置了插件樣板,我們可以輕松地使用 Composer 安裝其他軟件包。例如,如果我們想構(gòu)建一個(gè)帶有 OpenAI 集成的插件,我們可以openai-php/client使用以下命令包含該軟件包:

composer require openai-php/client

安裝后,Howdy 將自動(dòng)為該包中所有類的命名空間添加前綴。

您還可以安裝專門用于開發(fā)的軟件包。例如,要安裝symfony/var-dumper(一個(gè)流行的用于調(diào)試的 PHP 軟件包),您可以運(yùn)行:

composer require symfony/var-dumper --dev

與 PHP 的原生函數(shù)相比,該包提供了更加用戶友好的調(diào)試體驗(yàn)var_dump

Symfony Var Dumper 用法示例

生產(chǎn)準(zhǔn)備

最后,Howdy 提供了幾個(gè)命令來準(zhǔn)備發(fā)布你的插件:

npm run build:構(gòu)建目錄中的所有資產(chǎn)文件,包括 JavaScript 和樣式表src。這些文件已針對(duì)生產(chǎn)進(jìn)行了優(yōu)化和壓縮。

composer run build:重新編譯項(xiàng)目并刪除為開發(fā)而安裝的軟件包。

composer run plugin:zip:為插件創(chuàng)建可安裝的 ZIP 文件。不需要的文件(如點(diǎn)文件、src目錄等)node_modules將從最終存檔中排除。

總結(jié)

在本文中,我們探討了 Howdy 及其對(duì) WordPress 插件開發(fā)的好處。

Howdy 旨在實(shí)現(xiàn)插件開發(fā)的現(xiàn)代化,而不會(huì)讓您感到不知所措。它避免使用各種流行工具(例如,默認(rèn)情況下不包含 PHPUnit、PHPStan 或 TypeScript)來使您的工作流程變得臃腫,但您可以根據(jù)需要稍后添加它們。

通過解決依賴沖突并啟用 Composer,Howdy 將 WordPress 開發(fā)與更廣泛的 PHP 生態(tài)系統(tǒng)連接起來,為構(gòu)建可維護(hù)和可擴(kuò)展的插件開啟了無數(shù)可能性。

注:本文來自 https://www.hongkiat.com/blog/howdy-modern-wordpress-plugin-boilerplate-guide/,由 WordPress大學(xué) 翻譯整理。

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個(gè)人或組織,在未征得本站同意時(shí),禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺(tái)。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。

給TA打賞
共{{data.count}}人
人已打賞
歡迎關(guān)注WordPress大學(xué)公眾號(hào) WPDAXUE
WordPress開發(fā)

WordPress 6.5 新功能:字體庫 詳解

2024-3-15 11:23:19

用戶交互

WordPress 使用“極驗(yàn)驗(yàn)證”阻止惡意注冊和垃圾評(píng)論

2015-10-10 8:03:00

0 條回復(fù) A文章作者 M管理員
    暫無討論,說說你的看法吧
?
個(gè)人中心
購物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索

洪江市| 根河市| 金湖县| 开鲁县| 长葛市| 舞阳县| 阿瓦提县| 大荔县| 巍山| 揭东县| 安溪县| 邵武市| 富锦市| 乌拉特前旗| 合川市| 新巴尔虎右旗| 海盐县| 延庆县| 马尔康县| 阳谷县| 垦利县| 剑川县| 孝昌县| 邯郸市| 兴仁县| 泾阳县| 东丰县| 南昌县| 土默特左旗| 桃源县| 积石山| 广水市| 根河市| 东海县| 临沭县| 安国市| 花莲县| 凌源市| 保康县| 桐梓县| 陵川县|