本站的主題是商業,創業,美食,葡萄酒,閱讀,網路科技。
這是我的 FB粉專 以及 IG,我比較常使用 Threads,歡迎大家追蹤互動~
https://codex.wordpress.org/Writing_a_Plugin
https://developer.wordpress.org/plugins/plugin-basics/
WordPress 的 plugin (外掛) 放在 wp-content/plugins
, 官方文件提到,開發 plugin 第一件事情就是想名稱,plugin 的名稱要有獨一性。即使你的 plugin 沒上架,也要考慮 plugin 名稱的獨一性,如果名稱跟其他 plugin 有重複時,會造成升級時的混淆。
官方建議名稱可以取 mycompanyname-fabulous-functionality
(前置你的公司名稱,用 dash 分隔)。每個 plugin 至少要有一支 php, 官方建議檔名跟資料夾一致,也就是 mycompanyname-fabulous-functionality.php
但實務上不一定要加公司名 (很多官方出的外掛也沒有冠 Automattic, 裡面的 PHP 檔名也沒有跟資料夾一致)
plugin 裡每支 php 應該第一行是 defined('ABSPATH') or die();
以確保你的每支 php 是在 WordPress core system 裡面。
plugin 裡的其中一支 (而且只能有一支) PHP 要加上 header, 其中只有 plugin name 是 required.
https://developer.wordpress.org/plugins/the-basics/header-requirements/
基本上有三個 action hook 是一定要的,在這支有 header 的 PHP 加上
register_activation_hook( __FILE__, 'your_activation_function') register_deactivation_hook( __FILE__, 'your_deactivation_function') register_uninstall_hook( __FILE__, 'your_uninstall_function')
可以很直覺的看出來,分別是啟用時調用、停用時調用,和解除安裝時調用。通常這三個 action hook 是寫在這支 PHP 裡 (暫稱之為 main plugin file), 但是也可以寫在其他 PHP 裡。如果寫在其他 PHP,記得 __FILE__
要換成 main plugin file 的路徑。
https://developer.wordpress.org/plugins/the-basics/uninstall-methods/
deactivate 跟 uninstall hooks 官方文件特別提了,deactivation hook
處理的是移除 temp files/folders, flush permalinks 等,uninstall hook
處理的是移除你新加的 options, DB tables, 也就是復原系統。不要把 deactivate 跟 uninstall hooks 搞混了。
https://developer.wordpress.org/plugins/the-basics/best-practices/
多個外掛時,很有可能變數名, 函數名, class名稱可能會衝到。官方文件提供了一些好的 coding practice, 分析的很漂亮,相信很多有工程背景的朋友也會覺得這篇官方文件很讚。
1. Procedural
– 所有變數, 函數, class名稱加上 prefix
– check for existence, 尤其是 functions
Variables: isset() (includes arrays, objects, etc.)
Functions: function_exists()
Classes: class_exists()
Constants: defined()
2. OOP
將外掛子模組的 code 包成 class.
3. File Organization
外掛裡的檔案要有檔案結構,而不是都擺在同一層。
4. Plugin Architecture
– Conditional Loading, 把 admin code 跟 public code 分開,調用時用 is_admin()
來區分。
– Architecture Patterns.
5. Boilerplate Starting Points
上方文件建議開發者「不要」每次都從 0 開始寫 plugin,而是要建立自己的樣板,這樣你所有開發的 plugin 才會有一致性 (consistency)。上方文件並提供一些 template 可以參考。
除了 activation, deactivation, uninstall 三個 action, 整個 WP 其實是 action (用軟體工程比較通用的說法是 event) 驅動的一個框架,底下是 WP 的 action reference, 包含前後台每次 request 的 action 順序
https://codex.wordpress.org/Plugin_API/Action_Reference
提一下 form submission 的部分…
https://codex.wordpress.org/Plugin_API/Action_Reference/admin_post_(action)
在 WP 寫表單時,首先要定義一個 hidden field
<input type="hidden" name="action" value="your_post_action_name">
your_post_action_name
請自行選擇,注意這個 action 跟 <form> action 無關。<form> 一般是
<form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
然後註冊你的 handler
add_action( 'admin_post_your_post_action_name', your_handler_function );
這個 action 就是你的 your_post_action_name
前面直接黏上 admin_post_
如果你是給前台沒登入的用戶 submit form
add_action( 'admin_post_nopriv_your_post_action_name', your_handler_function );
就是 admin_post_
改成 admin_post_nopriv_
, 後面一樣黏 your_post_action_name
結論
WP 的開發眉眉角角很多,而且很多是實務的經驗 (其實 larry 不是很建議初學 web 的工程師以 WP 當做第一個學習框架)。以上只是就大的框架走過一遍,後續有空再跟大家分享吧 ~
本站的主題是商業,創業,美食,葡萄酒,閱讀,網路科技。