如何修改既有 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' );
AI 文章延伸

讓 AI 幫你讀這篇文章

選擇平台後會自動帶入閱讀脈絡,快速整理重點、補齊盲點,並延伸到同站相關文章。

發佈留言

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

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