了解如何創(chuàng)建 WordPress 自定義功能插件并將自定義代碼添加到您的主題、專用插件或通過(guò) WordPress 儀表板管理它們。
作為一名 WordPress 后端開(kāi)發(fā)人員十多年來(lái),我使用了各種方法來(lái)調(diào)整 WordPress 以滿足我和其他人的需求。最常見(jiàn)的一種是編寫(xiě) WordPress 自定義功能插件。正如您將在下面看到的,這不是唯一的選擇,也不總是正確的選擇。
雖然我將這篇文章獻(xiàn)給開(kāi)發(fā)人員,但項(xiàng)目經(jīng)理還將了解這些方法如何滿足其團(tuán)隊(duì)的需求以及何時(shí)以及如何使用它們。
以下是我用來(lái)自定義 WordPress 的方法:
- 將您的代碼添加到主題的
functions.php - 編寫(xiě)一個(gè)WordPress自定義功能插件
- 使用插件來(lái)管理自定義代碼片段
- 通過(guò)必要插件來(lái)自定義
讓我們更深入地了解一下這些方法。
將代碼添加到Functions.php
在“舊”時(shí)代,當(dāng) WordPress 主要在前端和后端使用 PHP 時(shí),對(duì)站點(diǎn)進(jìn)行一些更改的最快方法是將代碼添加到主題的 functions.php 中。
您仍然可以執(zhí)行此操作,如果您敢的話,請(qǐng)使用WordPress 儀表板中的主題文件編輯器。

functions.php文件中自定義代碼。隨著時(shí)間的推移,這從我最喜歡的自定義 WordPress 方式變成了我最不喜歡的方式。
主要原因是它functions.php附屬于一個(gè)主題。如果這不是自定義主題并且有人更新它,我的調(diào)整就會(huì)消失。
解決方案是創(chuàng)建一個(gè)子主題,其中包含與父主題相關(guān)的更改。
我不再向functions.php文件添加盡可能多的自定義代碼的主要原因是,大部分代碼都是插件領(lǐng)域,通常向網(wǎng)站添加功能,而不僅僅是主題。
還有兩種情況我需要將自定義代碼寫(xiě)入functions.php:
- 該代碼與自定義或子主題相關(guān)。
- 在將它們移動(dòng)到另一個(gè)地方之前測(cè)試快速更改,因?yàn)?code>functions.php通常很容易訪問(wèn)它。
另外,請(qǐng)記住,這functions.php不是托管許多更改的地方,因?yàn)閱蝹€(gè)文件可能會(huì)變得過(guò)于復(fù)雜。特別是當(dāng)我的更改中需要多個(gè) PHP 文件和其他文件類型時(shí),我選擇編寫(xiě)一個(gè) WordPress 自定義功能插件。
編寫(xiě)自定義函數(shù)插件
如前所述,我添加到站點(diǎn)的大部分代碼實(shí)際上是構(gòu)建或擴(kuò)展獨(dú)立于主題的功能。
一旦我知道我將向網(wǎng)站添加更多自定義項(xiàng),我就會(huì)啟動(dòng)一個(gè)自定義功能插件。它通常帶有站點(diǎn)的名稱,就像我將 WP Mayor 稱為“WP Mayor 自定義功能”插件一樣。
命名很重要!首先,它允許其他管理員看到該插件與該站點(diǎn)相關(guān),并且可能僅托管該站點(diǎn)的更改。
其次,保持插件文件夾和文件名唯一可以防止您的 WordPress 站點(diǎn)意外地使用在 wordpress.org 插件存儲(chǔ)庫(kù)中具有相同 slug 的插件覆蓋它。
創(chuàng)建 WordPress 自定義功能插件很容易。您所需要的只是wp-content/plugins. 但是,您應(yīng)該首先創(chuàng)建一個(gè)新文件夾,因?yàn)槟ǔP枰鄠€(gè)文件來(lái)構(gòu)建代碼,并且可能需要添加 JavaScript 和 CSS 代碼文件。
按照我們的示例,假設(shè)我們現(xiàn)在有了wp-content/plugins/wp-mayor-custom-functions/wp-mayor-custom-functions.php插件文件夾和主文件。
讓我們向文件添加一個(gè)標(biāo)頭來(lái)告訴 WordPress 我們的插件的用途。雖然“插件名稱”足以使其在技術(shù)上工作,但讓我們看一個(gè)更高級(jí)的示例:
/**
* Plugin Name: WP Mayor Custom Function
* Plugin URI: https://wpmayor.com
* Description: All the cool features we custom-built for us.
* Version: 1.0.0
* Requires at least: 6.2
* Requires PHP: 8.1
* Author: Thomas Maier
*/
這應(yīng)該已經(jīng)顯示在我們的 WordPress 儀表板的“插件”下。

現(xiàn)在,我們可以瘋狂地將實(shí)際的 PHP 代碼添加到我們的文件中。
提示:當(dāng)我無(wú)法通過(guò) FTP 訪問(wèn)站點(diǎn)或者只是懶惰時(shí),我會(huì)使用Pluginception插件快速啟動(dòng)一些內(nèi)容,稍后我可以通過(guò) WordPress 儀表板中的插件文件編輯器填充代碼。
您現(xiàn)在是否應(yīng)該將特定站點(diǎn)的所有代碼放入一個(gè)專用的自定義功能插件中?
這取決于。當(dāng)我知道自定義代碼用于多個(gè)項(xiàng)目時(shí),我將其分離到不同的插件中。同時(shí),我在單個(gè)插件中收集專用于特定站點(diǎn)的代碼。插件越少,我需要維護(hù)的代碼存儲(chǔ)庫(kù)就越少。
到目前為止聽(tīng)起來(lái)不錯(cuò)嗎?嗯,在過(guò)去幾年管理一家更大的插件公司并對(duì)網(wǎng)站進(jìn)行了一百多次調(diào)整時(shí),我注意到這些自定義插件仍然非常以開(kāi)發(fā)人員為中心。因此,讓我們?cè)谙乱还?jié)中看看另一種方法。
使用代碼片段插件來(lái)管理
在我從事大型插件業(yè)務(wù)的大部分時(shí)間里,我負(fù)責(zé)插件商店的技術(shù)方面。
我將任何非主題特定的代碼放入單個(gè)自定義函數(shù)插件中。對(duì)各個(gè)插件和自定義的所有調(diào)整,例如將空卡重定向到定價(jià)頁(yè)面、追加銷售或黑色星期五優(yōu)惠,都被記錄下來(lái)并分布在具有可讀名稱的各種文件中。
好吧,對(duì)于任何有權(quán)訪問(wèn)代碼的人來(lái)說(shuō),“已記錄”和“可讀”。
盡管我總是在周圍進(jìn)行調(diào)整或回答有關(guān)它們的問(wèn)題,但我覺(jué)得這不是處理大多數(shù)自定義功能的有效且可持續(xù)的方式。
隨著越來(lái)越多的人參與管理商店和網(wǎng)站,我想讓他們有機(jī)會(huì)了解這些調(diào)整,而不必在我們的知識(shí)庫(kù)中保留專門(mén)的頁(yè)面來(lái)更新。
解決方案是安裝一個(gè) WordPress 自定義功能插件,用于管理 WordPress 儀表板中的所有或大部分代碼片段。
我個(gè)人最喜歡的是免費(fèi)的代碼片段插件,但也有其他插件。
對(duì)于代碼片段,儀表板中有一個(gè)包含所有代碼片段的專用菜單項(xiàng)。
現(xiàn)在,任何具有管理員訪問(wèn)權(quán)限的人都可以看到這些調(diào)整。我為每個(gè)片段使用描述性名稱,使用注釋字段對(duì)其進(jìn)行深入描述,并為更改組分配標(biāo)簽。

我的標(biāo)簽通常是調(diào)整的插件或主題的名稱以及涉及的頁(yè)面部分,例如“WooCommerce”和“Checkout”。

如果你選擇了好的名字和好的結(jié)構(gòu),任何人都應(yīng)該能夠找到并理解調(diào)整。包括我自己。我什至在我的個(gè)人網(wǎng)站上也使用這種方法,因?yàn)樗峁┝撕芏嗍孢m感。
使用自定義函數(shù)插件對(duì)于您只臨時(shí)需要的代碼片段特別有用,例如一些只需要偶爾運(yùn)行一次的清理代碼或一些面向前端的操作(例如啟用促銷)。
這安全嗎?
默認(rèn)情況下,WordPress 允許任何具有“管理員”角色的人在后端編輯插件和主題文件。使用自定義代碼插件與此沒(méi)有什么不同。因此,防御性的、只給每個(gè)人所需的角色的舊規(guī)則仍然適用。
開(kāi)發(fā)人員可能想知道,通過(guò)插件管理代碼時(shí),頁(yè)面請(qǐng)求上的一些非常早期的掛鉤不可用,因?yàn)椴寮旧硇枰紫燃虞d。如果您需要在任何其他插件之前加載自定義代碼,請(qǐng)查看下面的必須使用的插件(MU Plugins)選項(xiàng)。
使用必要插件來(lái)自定義 WordPress 功能
所謂“必要”插件是插件中的一個(gè)特殊品種。
由于它們?cè)谌魏纹渌罢!辈寮皥?zhí)行,因此我使用它們來(lái)打開(kāi)或關(guān)閉給定頁(yè)面的特定插件。您可以使用此類代碼來(lái)加速偽 API 或?qū)?code>admin-ajax.php.
必要插件的另一個(gè)特點(diǎn)是它們默認(rèn)啟用,沒(méi)有人可以通過(guò) WordPress 儀表板禁用或更改它們。這使得它們成為甚至管理員用戶都無(wú)法訪問(wèn)的基本代碼的理想選擇。
創(chuàng)建必要插件
必要插件托管在文件夾中wp-content/mu-plugins。新安裝的 WordPress 中不存在此文件夾。不過(guò),一些插件或托管公司可能會(huì)在此處動(dòng)態(tài)添加內(nèi)容。
要在 mu-plugin 文件夾中添加新插件,您必須在計(jì)算機(jī)上使用我在上面向您展示的自定義插件的插件文件頭創(chuàng)建一個(gè) PHP 文件。這次,選擇唯一的名稱并不重要,因?yàn)楸仨毷褂玫牟寮粫?huì)自動(dòng)更新。
一旦您對(duì)新的自定義功能插件感到滿意,請(qǐng)通過(guò) FTP 將其手動(dòng)上傳到該wp-content/mu-plugins文件夾??。mu-plugins如果該文件夾不存在,則創(chuàng)建該文件夾。
雖然您無(wú)法通過(guò) WordPress 管理面板更改必要插件,但您可以在插件 >強(qiáng)制使用 下看到它們。

理想情況下,必要插件是單文件插件。盡管您可以在主 PHP 文件中引用其他文件,但 WordPress 無(wú)法在子文件夾中找到它們。但是,如果您創(chuàng)建一個(gè)復(fù)雜的 Must Use 插件,請(qǐng)考慮將主要代碼移至常規(guī)插件中,并使用 必要插件 僅在所有其他插件之前加載運(yùn)行所需的內(nèi)容。
總結(jié)
我們探索了向 WordPress 添加自定義代碼的各種方法,從傳統(tǒng)的向主題functions.php文件添加代碼、獨(dú)立插件和 WordPress 自定義功能插件到使用 必要插件(mu-plugins)。每種方法都有自己的優(yōu)點(diǎn)和潛在缺點(diǎn),適合不同的需求和場(chǎng)景,具體取決于更改的類型以及誰(shuí)應(yīng)該有權(quán)訪問(wèn)它。
拓展閱讀:
- WordPress插件和functions.php哪個(gè)更好?
- 編輯WordPress主題的 functions.php 文件的注意事項(xiàng)
- 使用WordPress的子主題功能修改你的WordPress主題
- 如何創(chuàng)建和自定義WordPress子主題
- 如何在WordPress子主題中覆蓋父主題的函數(shù)功能
- 什么是 WordPress 必要插件 mu-plugins,如何使用?




