【教學】讓 外掛 與 WordPress 產生互動

上一篇教學 有一點再說廢話的感覺。
不過外掛就是要作者有創意之後才會產生的物品沒有錯,只是好一點的應該是教導如何抓住你的創意。
廢話到此,言歸正題。

外掛,就是要與 WordPress 的主系統產生連結的合併運作。
但是我們在寫外掛的時候卻又完全的沒有修正主程式,那之間是如何連結的呢?
就使用 WordPress 設計十分豐富的 Plugin Application Program Interface (外掛應用程式介面),簡單的說就是 WordPress 程式中提供了數以百計的 API 嫁接點讓我們寫的外掛程式可以完美的遷入之中運行。

在與主程式進行嫁接的時候,又可以分為 Action(動作)Filter(過濾器) 兩種不同的模式。註1

基本上,這兩種都是在該點執行外掛所撰寫的函式。
差別在於 Action 執行的含是不需要有回傳值,但可能會有傳入值(參數)。
而 Filter 的就需要有傳回值,相對的也就會有傳入值(參數)。
為了怕單純的文字說明有點難以理解,所以加了張自製的圖片來說明一下。註2

當要嫁接一個 Action 的時候,外掛會使用如下的函式來加入

add_action ( 'hook_name', 'your_function_name', [priority, [accepted_args]] );

當要嫁接一個 Filter 的時候,外掛會使用如下的函式來加入

add_filter ( 'hook_name', 'your_function_name', [priority, [accepted_args]] );

你會發現兩者長相差不多,其各個參數的意義解釋如下
hook_name => 欲嫁接點的 action /filter hook 名稱
your_function_name => 所需要執行的函數名稱
priority => 優先權,預設值為 10,越小的數字越先執行
accepted_args => 你所執行的函數有幾個輸入值(參數),預設為 1。某些 Action (Filter) 提供操過 2 個參數時即可以此設定。

那你會好奇在實際寫作的時候有多少得可以使用呢?
我也不清楚,這一直因為 WordPress 的版本更新而變更者,可以前往官方網站的 Codex 中有詳細說明。
Action 參考列表
Filter 參考列表

其中在看 Action 列表的那頁之時,最上面有一項標題為 Actions Run During a Typical Request 的內容,是一份根據 WordPress 3.0.1 版本生成一個頁面所會歷經的 Action 順序列表。這一份列表只是給你當作一個參考用的,因為實際上會因為妳所安裝的佈景主體、外掛種類、文章內容,等等的因素導致裂表中的項目被執行不只一次或是項目被停用或是新增。這只是一個預設合理情況下會被執行的列表給你做參考。

  1. muplugins_loaded
  2. plugins_loaded
  3. sanitize_comment_cookies
  4. setup_theme
  5. load_textdomain
  6. after_setup_theme
  7. auth_cookie_malformed
  8. set_current_user
  9. init
  10. widgets_init
  11. register_sidebar
  12. wp_register_sidebar_widget
  13. wp_loaded
  14. parse_request*
  15. send_headers*
  16. parse_query*
  17. pre_get_posts*
  18. posts_selection
  19. wp*
  20. template_redirect
  21. get_header
  22. wp_head
  23. wp_enqueue_scripts
  24. wp_print_styles
  25. wp_print_scripts
  26. get_template_part_loop
  27. loop_start*
  28. the_post*
  29. loop_end*
  30. get_sidebar
  31. dynamic_sidebar
  32. get_search_form
  33. wp_meta
  34. get_footer
  35. twentyten_credits
  36. wp_footer
  37. wp_print_footer_scripts
  38. shutdown

如此一來,有沒有多一點點的瞭解,外掛程式與主程式之間是如何達成互動的。
其實不單單是外掛以如此的方式運作,WordPress 程式本身很多時候也是利用此一機制在運行的。我們甚至可以藉由停用 action 或 filter 來改變原本 WordPress 的執行過程與內容,不過這部分就太深入了,以後有機會再慢慢的寫吧~

註1:因為翻譯成中文我個人覺得不是很好完美的翻譯,而且寫作與官方文件都是英文,所以我也會採用英文寫作。
註2:希望我的圖片不要反而照成大家的困惱。