如何修改既有 WordPress 外掛的流程思考

常遇到讀者來信問說該如何知道要修改外掛功能時該用哪個勾點,坦白說我也不知道,只能靠著經驗跟 Google 來找,但常常也會卡關就是了,於是我試著紀錄自己在找線索時的思考方向與步驟,作為除錯時的一個參考。

我的情境是這樣:客戶發現課程外掛 LearnDash 在顧客送出訂單後且訂單狀態變更為處理中時,顧客就能看到課程內容,但有些付款方式當訂單處理中時事實上還沒付款完成,因此造成顧客還沒付錢就能看到課程內容,為了要修改這問題我的思路如下:

  1. 先從資料庫裡面查紀錄使用者課程開通的欄位叫什麼
  2. 從程式碼裡面去找寫入該欄位的函式寫在哪邊
  3. 但發現程式碼太大不容易爬
  4. 於是換個方向,先測試是在哪幾種訂單狀態會開通
  5. 找到只有在訂單狀態為完成、處理中時會開通
  6. 找到訂單變成取消時會移除開通權限
  7. 發現該功能寫在 LearnDash 的擴充 learndash-woocommerce
  8. 使用 VSCode 開啟該擴功的資料夾進行搜索
  9. 搜尋關鍵字 processing、completed 或是 hook
  10. 發現在勾點 woocommerce_order_status_processing 有觸發 add_course_access() 的方法
  11. 找到後思考該如何不動到原始碼的情況下進行修改
  12. 發現到移除課程觀看權限的方法是 remove_course_access()

所以我最後的解法是在勾點 woocommerce_order_status_processing 的地方多呼叫一次 remove_course_access(),就能確保當訂單狀態變為處理中時能移除課程權限:

<?php

function remove_course_permission() {
	add_action( 'woocommerce_order_status_processing', array( 'Learndash_WooCommerce', 'remove_course_access' ), 99, 1 );
}
add_action( 'plugins_loaded', 'remove_course_permission' );
文章標籤LearnDash

目錄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

Picture of 賴俊吾 / Oberon Lai
賴俊吾 / Oberon Lai

現為全職 WordPress 工程師,網站開發經歷 11 年,專攻前端工程與 WordPress 佈景主題、外掛客製化開發

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!

專注於分享 WordPress 開發、接案技巧、專案管理等自由工作者必備知識與心得

© 2024 想點創意科技有限公司

想點創意科技有限公司 | 統一編號 90516823
Designed by Hend Design | 隱私權政策

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!