我寫了一個 WordPress 外掛 – 外掛開發經驗分享
正確來說,是兩個外掛 ^0^
第一個是免費版的 SyncPA – Discord Notifier for SureCart 外掛,在外掛完成沒多久後我們寫了這篇文章完整介紹了外掛的功能與設定。也因為 SureCart 的使用者大多在西方國家,所以這篇文章是用英文撰寫的。
第二個則是付費版的 SyncPA Pro 外掛,將 SyncPA 外掛功能進一步延伸,讓商店管理者可以直接在 Discord 頻道中管理訂單狀態。
從去年 11/12 SyncPA 初次上架到 WordPress.org 的外掛目錄之後,過了兩個月,SyncPA Pro 也釋出了第一個正式版本並由 SureCart 的授權系統託管中。
這中間有一些曲折的過程,花了比預期更多的時間評估方案、更改方案、寫程式,所以在社團中消失了一陣子…
為了讓外掛有個好看的說明文件,把塵封已久的 Archbee LTD 拿出來 (終於派上用場),也才有這一篇「子網域反向代理 (Reverse Proxy) 到子目錄與子目錄的 SEO 優勢」文章的出現。
為什麼寫 WordPress 外掛?
最初是為了解決老婆在管理她的藝術商店時遇到的問題。
當商店接到訂單後,她需要出門到超商或郵局寄貨,出門前如果沒有準備好,為了查詢客戶的聯絡方式 (例如:手機、地址) 就會需要登入網站後台查詢訂單的資料,相當不方便,而且有潛在的資安風險。
那有什麼工具可以讓大家方便查詢呢?
電子郵件中當然會有訂單資訊,如果有好好整理分類的話,或許出門時查詢會比較不手忙腳亂一點。
賴大寫了一個外掛 Order Notify 可以將 WooCommerce 訂單訊息推播到 LINE,雖然 LINE Notify 要結束服務了,但一樣可以利用 LINE Messaging 達成目的,只不過我們是使用 SureCart 作為我們的電商方案 =_=
參考賴大免費版外掛 FormNotify 的完整教學。
那手邊有適合的社群、通訊 APP 嗎?所以我就想到了 Discord,不僅適合西方國家的使用者 (LINE 只在亞洲流行)、具備完整的 API 文件,而且也提供互動功能。
開發外掛過程中的曲折
從 Discord 開發者文件開始,找到最多的資源都是透過 Python 或 Node.js 程式語言開發,因為有學過 Python 所以就決定從這開始了。
大概花了一段時間就把變更訂單狀態的框架寫好,接著考慮權限管理、授權碼管理、斜線命令 (slash command) 管理等;為了確認每一個伺服器的授權狀態又不想耗費太多資源,也多花了一些時間處理。
後段花費的時間主要都是在減少資源耗用上,畢竟用 Python 寫的 Discord 機器人會需要主機持續不斷的運作,避免資源濫用會是相當關鍵的。
至此,基本上只要在電腦或雲端主機上執行 Discord 機器人主程式,就能讓我老婆直接在 Discord 頻道中管理 SureCart 的訂單狀態了。
後來細查了 Discord 文件後發現,其實透過 Discord App 的 Interaction Endpoint URL,且在網站上開一個 Webhook 端點就能做到 Discord 機器人互動的功能了。
考量 WordPress 外掛可以讓使用者的網站直接以 PHP 程式碼執行 Discord APP 需要的指令,幾乎不會耗用額外的資源也無須額外架設主機託管 Discord 機器人,也難怪 WordPress 生態圈可以帶來這麼大的經濟產值。
這樣一來,付費版外掛就能以更低廉的價格提供給需要的社群成員了。
沒花太多時間思考就決定著手將原本的功能用 PHP 程式碼改寫了。
開發外掛過程中的學習
過去幾年因為有買到好用的 Code Snippets 外掛 WPCodeBox,在這次開發外掛之前其實就已經有寫 JS、CSS、PHP 程式碼片段的經驗,WPCodeBox 提供了進階的雲端空間功能,使用者寫了一些實用的程式碼片段之後,除了可以分享給社群之外,也可以上傳到 WPCodeBox 提供的雲端空間,未來有其他網站需要使用相同程式碼片段時,直接下載稍作調整就能使用了!
之所以提到 WPCodeBox,是因為外掛的開發者為了 WordPress 開發者們寫了另一個外掛叫做 WPCodeBox IDE,顧名思義就是專屬於 WordPress 的整合開發環境 (Integrated Development Environment)。
而對 WordPress PHP 的開發不熟,初期參考了 Eric Chuang 與一介資男相關文章的經驗分享,對於外掛開發與提交至 WordPress 外掛目錄的部分幫助相當大!
但因為沒有架設本地 WordPress 網站的習慣,我是在 ServerAvatar 主機控制面板上直接開一個測試網站,一開始比較克難的使用 WPCodeBox 寫程式碼,但每一次要打包成外掛進行稍微正式一點的測試時就需要經歷以下步驟:
- 將程式碼複製到電腦中的外掛目錄
- 將外掛目錄壓縮為 zip 檔
- 上傳到網站安裝
如果在測試修改的過程中,會因為這些重複、多餘的工作而影響開發效率非常分心,使用 WPCodeBox IDE 之後,可以直接瀏覽網站的外掛目錄,任意打開想要查看、編寫的程式碼,修改後只要按下 Ctrl + S 儲存就能直接在網站上查看結果。

當要定版時,只要在外掛目錄按右鍵 > Download 就可以直接下載整個外掛目錄的壓縮檔,這對 WordPress 外掛、佈景主題開發者來說真的相當實用。

值得一提的還有,按右鍵的功能選項中也提供了可以直接啟用與停用外掛的功能,非常方便。
WPCodeBox IDE 目前僅供 WPCodeBox 客戶購買,雖然還在 Beta 階段,但我在開發的過程中沒有遇到任何問題!
有了好用的工具之後,SyncPA 外掛很快就開發完成並於 10/25 在 WordPress 提出上架申請。(感謝開發前輩們的外掛上架經驗分享)
這段期間覺得特別實用的工具包含了:
- WPCodeBox – 檢查、確認小功能
- WPCodeBox IDE – 大幅提升開發效率,修改後可直接確認結果
- Error Log Monitor – 抓蟲過程中可以很方便的在 wp-admin > Dashboard 查看 PHP 錯誤日誌
- Query Monitor – 查看外掛的執行程序
- Plugin Check (PCP) – 提交外掛前的必備工具,可進行大多數外掛「合規」檢查,包含 I18N
- Transients Manager – 如果有使用到暫存紀錄的必備工具
- Advanced Database Cleaner PRO – 檢查外掛儲存在 Options 中的資料、Cron Jobs、過期的暫存紀錄
關於 Advanced Database Cleaner 外掛的應用,可參考「提升 WordPress 網站效能的 10 大關鍵」一文。
這個工具清單僅針對外掛目前使用到的功能,除了後台設定介面,其他主要都是與外部 API、Webhooks 的處理。
未來開發的外掛功能中如果有涉及區塊、短代碼,到時候應該就會有其他工具的需求了。
WordPress 外掛託管
簡單來說有兩種方式可以託管外掛的檔案與版本。
- 申請上架 WordPress 外掛目錄
- 使用第三方授權管理系統
託管最大的目的不只是有地方可以讓使用者下載新版的外掛檔案,最重要的是能夠在網站後台 > 外掛 > 已安裝的外掛列表
中,當外掛有新版本發布時能第一時間收到通知,並且能直接在後台更新外掛版本。
申請上架 WordPress 外掛目錄
對於不收費 (Free 或 Freemium) 的外掛,這會是開發完成後的必要步驟,就是到 WordPress.org 官方的申請頁面上提交外掛檔案。
開發 WordPress 外掛需要注意的細節很多,不過 WordPress 官方都一一整理好了,只要大家耐下性子仔細閱讀官方社群提供的外掛開發手冊。
手冊中的內容相當豐富,從外掛的基礎知識、安全性、Hooks、後台選單、設定頁面、自訂內容類型、使用者權限、支援的 API 內容、本地化等,一直到上架時需要注意的外掛檢查 (Plugin Check)、外掛目錄中的說明文件,都有詳細的說明。
一般來說,只要有使用官方社群開發的 Plugin Check 外掛對程式碼進行檢查,並且將檢查結果中警示與錯誤的部分修正好,提交外掛申請需要注意的大概就只剩下要注意是不是外國社群的休假期間了。
如果在大節日提出申請,需要等待的時間就會拉長。
而社群的自願審核人員也都相當專業、有耐心,會提醒需要修改與注意的事項,按照指示修改完成後,接著就會收到申請通過的通知。
別忘了這些工作都是社群中具備資格的人自願貢獻時間來幫大家審核的,大多數人可能都是利用下班或自己的時間協助審核,所以不要太心急,耐心等候審核人員的回覆即可。
第三方授權管理
會使用第三方授權管理平台來託管外掛的,一般都會是付費的專業版外掛。
我們在「電子商務外掛 SureCart、WooCommerce、EDD 的進階應用費用比較」一文中提到過使用 WooCommerce、EDD (Easy Digital Download) 或 SureCart 等電商方案進行軟體、外掛銷售的差異,對於授權機制與授權管理每年大多都有固定的費用支出,主要也是因為會有主機、頻寬、授權驗證與管理的資源耗用。
我們是使用 SureCart 電子商務外掛,所以就是採用 SureCart 的授權管理功能,對開發人員來說使用難度應該是「簡單」,只要完成以下步驟就能確實管理每一個售出的授權碼,客戶也能從他們的購買頁面中查看授權碼以及目前使用授權碼的網域名稱。
- 將 SureCart 提供的 WordPress SDK 包含在外掛的目錄中
- 在程式碼中指定授權管理頁面的位置
- 在開發者網站的 SureCart 商店中建立綁定外掛授權的商品
- 在商品設定中指定外掛的當前版本
- 在商品設定中建立各個購買方案的定價與授權碼使用次數 (授權網站數)
當未來有新版本發布時,外掛開發者只需要在這個商品中加入新版本檔案,並指定為當前版本即可。
這樣一來,當客戶購買方案時,系統會自動派發授權碼給這位客戶,後續客戶在網站上啟用外掛的授權碼時就會透過 API 進行驗證。
SureCart 只會針對每一筆銷售收取 0.5% 的手續費用,使用免費版 SureCart 的人只會再有額外的 1.9% 銷售手續費 (付費版免收此費用),即便如此,這還是比 EDD 或 Freemius 收取的費用要便宜相當多,精打細算的開發者們可以評估一下適合自己的工具。
結語
分享到這裡,其實整個過程中最困難的還是後續的銷售了,畢竟這一輩子的能力點數都點在邏輯分析上 ^^;
不過沒關係,這外掛最初的用途本來也就是給我老婆跟我自己的網站使用,如果還能對其他人有幫助都是錦上添花了。
似乎架站的每一年都會搞一些有趣的大事來做,2024 年就屬開發 WordPress 外掛最有趣,也最有成就感了!
這次的開發經驗不會是最後一次,因為在過程中已經迸發了一些有趣的點子等待我未來一一實現,希望這些經驗分享也能對大家帶來一些啟發,如果有任何問題都歡迎填寫聯絡表單直接與我討論,或是加入我們的臉書社團、Discord 社團一起討論唷!