到目前為止,我們已經從基本的檔案目錄架構、資料庫結構到核心的機制例如鉤點和過濾器、路由、權限以及資料庫的操作等等,都已經有一定的認識了,雖然 WordPress 程式開發可以學習的東西還很多,不過就以開發外掛來說,已經很足夠了。
讓我們利用這距離鐵人賽結束還剩下的這 5 天,利用之前所學,設計一個 WordPress 外掛,從構思、實作到上架,做一個完美的 Ending 吧!
圖:Facebook 貼文
在 WordPress 裡市佔率最高的 SEO 外掛應該是 Yoast SEO,筆者曾經有感於它太肥大,想自己寫一個精巧的。筆者的需求只有以下功能:
盤點完要大致上要設計的功能後,開始這一系列的外掛設計實戰,以上功能也是接下來數天的鐵人賽內容哦!
這邊的命名指的是外掛的網址 slug,也是外掛的識別字串。必須是全英文小寫字母,搭配連接號 -
。
在 WordPress 的官方外掛目錄搜尋我們想要的名稱是否已被命名不大準確,因為被下架的外掛並不會被搜尋到,而即使外掛已被下架,該名稱具有唯一性,被佔用之後就無法再被使用囉。
可以直接在 WoredPress 外掛的網址尾端測試該 slug 是否已被佔用。
網址:
https://wordpress.org/plugins/{slug}/
替換 {slug}
為要查詢的名稱,例如,筆者在搜尋外掛「light seo」並沒有找到類似命名,但實際上該名稱已被佔用,用這個方式即可查到過去有被使用的記錄。
圖:已被下架的外掛頁面
有已被使用的記錄就無法再使用了。要在歷史悠久的 WordPress 找到好聽、響亮的,且 slug 非常簡短漂亮的實在不容易呀!
而且如果 slug 字串內含商標名稱的話,根據 WordPress 的外掛規則,不能把商標放在 slug 的第一位,命名會先加個前輟,例如貴公司或工作室名稱的簡寫為 ac
的話,命名為 ac-light-seo
就不會和其它外掛撞名,且避免了 WordPress 對於商標字串的使用規範。
既然 light-seo
已經被使用,lite-seo
也是,同樣概念的名字 slim-seo
也都被使用了啊啊啊啊啊!
經查 airy-seo
尚無,勉強有像空氣一樣輕飄(精簡的感覺,因此就以這個為外掛的名稱。
另外可以安慰自己找不到適合的名稱而採用這個命名的理由:以 a
為開頭有個好處,在後台外掛列表的排序會排在前面。
airy-seo
是筆者為這次的外掛命名。在寫這篇文章的同時,也以該名稱建立了 GitHub 的儲存庫
原始碼都會放在上面。
圖:airy-seo.php 外掛識別區塊
在 WordPress 的 wp-content/plugins
目錄下建立我們這次要設計的 SEO 外掛的目錄 lite-seo
。並開建立一個同名的 PHP 檔案。
接著在檔案的最上方加入如下的註解內容。
<?php
/**
* Plugin Name: Airy SEO
* Plugin URI: https://github.com/terrylinooo/airy-seo
* Description: A lightweight WordPress plugin offering essential SEO tools without the bloat.
* Version: 1.0.0
* Author: Terry Lin
* Author URI: https://terryl.in/
* License: GPL 3.0
* License URI: http://www.gnu.org/licenses/gpl-3.0.txt
* Text Domain: airy-seo
* Domain Path: /languages
*/
入口的主檔案不一定要同名,只是筆者習慣這麼做,在程式的閱讀性較佳,讓人一看就知道是外掛的入口檔案。
並且保持在外掛目錄下只有一個 PHP 檔案,原因是 WordPress 會在外掛目錄的第一層結構搜尋 PHP 檔案並檢查檔頭的註解資訊,為避免無謂的多餘檢查,保持一個 PHP 檔案作為定義檔頭的註解以及初始化之用。
當我們在 WordPress 外掛目錄的 PHP 檔案頭部加入註解,例如外掛名稱、版本、作者等,WordPress 會使用位於 wp-admin/includes/plugin.php
檔案中的 get_plugin_data
函式來取得這些資訊並在後台顯示。
圖:WordPress 後台 - 外掛列表
一旦在外掛的目錄中有 airy-seo
目錄,且裡頭有定義入口檔案的標題資訊,進到 WordPress 的後台,外掛列表的頁面,會看到 Airy SEO 這支外掛已經在列表上了。
按下「啟用」,就會載入該支檔案,並將狀態設為已啟用,同時,如果有編寫一些初始化設定的邏輯的話,則會被執行。
function register_activation_hook( $file, $function )
register_activation_hook
是一個 WordPress 核心函式,它允許開發者在外掛啟動時執行一個特定的函式。這常常用於初始化設定、建立資料庫表格或其他只需要在啟動時執行一次的任務。
參數說明:
$file
(string)(必需):外掛主檔案的絕對路徑。通常,你會使用 __FILE__
常數來指定當前的 PHP 檔案。$function
(callable)(必需):當外掛被啟動時要執行的函式或方法。
圖:register_activation_hook 程式碼範例 Gist
第 14 行:外掛預設值儲存到 wp_options
資料表中,鍵值為 airyseo_settings
的行中。
第 17 行:使用 register_activation_hook 函式初始化外掛設定。
特別注意,第一個參數必須為入口檔案的檔案路徑。
使用方法和 register_activation_hook 函式相同,不過它是在外掛從已啟用轉到停用狀態時觸發,用來執行停用外掛時的一些邏輯處理,例如,清理快取、回復預設值。
圖:register_deactivation_hook 程式碼範例
第 8 行:刪除 wp_options
資料表中,鍵值為 airyseo_settings
的行。
第 11 行:使用 register_deactivation_hook 函式移除外掛設定。
當網站管理員刪除外掛時,應該將外掛產生的資料刪除,以免資料庫中堆積用不到的資料。
有兩種方式:
圖:uninstall.php 程式碼範例
在這個檔案中,可以使用 WordPress 核心函式和全域變數。例如第 10 行,執行了 SQL 語法,刪除了外掛建立的資料表。
今天的文章的重點在於:
當我們把外掛的入口檔案設置好,就可以開始進行外掛功能的開發了。而明天則會進一步介紹建立此外掛在後台選單的入口位置,以及建立設定的頁面。
參考官方文章:
課後思考:
啟用外掛及停用外掛時,除了利用註冊所相應鉤點的函式來進行初始化設定或進行垃圾回收以外,還可以做些什麼事?
前篇解答參考:
可以應用的情境沒有限制,限制的是開發者的想像力。例如:食譜網站、售車網站、售屋網站、電影評論網站、線上課程網站,實務上,通過自訂的文章類型和分類法,幾乎任何類型的內容都可以建立起結構化的目錄和分類系統。
想問個問題
如果是為公司寫的wordpress的外掛
沒有要上傳上去的話
外掛命名的部分
是不是就只要符合公司團隊命名邏輯就可以了
另外是自己開發的外掛
在外掛管理區中,已安裝的外掛底下看得到嗎?
感謝大大的回覆~~