Hook System
Hệ thống Hook của SkillDo CMS v8 được thiết kế theo mô hình WordPress Hook (Event-driven). Đây là cơ chế cốt lõi cho phép Plugin và Theme mở rộng hoặc thay đổi hành vi của CMS mà không cần sửa code gốc.
1. Hai Loại Hook
| Loại | Khi nào dùng | Trả về |
|---|---|---|
| Action | Thực hiện một hành động tại thời điểm nhất định | Không (void) |
| Filter | Biến đổi/lọc một giá trị trước khi dùng | Giá trị đã được lọc |
Quy tắc đơn giản:
- Cần làm gì đó (gửi mail, thêm class, xóa cache...) → dùng Action
- Cần thay đổi dữ liệu (sửa nội dung, thêm HTML, lọc mảng...) → dùng Filter
2. Action Hooks
add_action() — Đăng Ký Callback Cho Action
add_action(string $tag, callable $callback, int $priority = 10, int $accepted_args = 1): bool
| Tham số | Mô tả | Mặc định |
|---|---|---|
$tag | Tên event/hook | bắt buộc |
$callback | Hàm sẽ được gọi | bắt buộc |
$priority | Thứ tự thực thi (càng nhỏ càng chạy trước) | 10 |
$accepted_args | Số tham số mà callback nhận | 1 |
// Dạng function đơn giản
add_action('init', function () {
// Chạy khi CMS khởi tạo
});
// Dạng static method
add_action('init', [MyPlugin\Services\TaxonomyService::class, 'register']);
// Dạng instance method
$service = new MyService();
add_action('save_post', [$service, 'onPostSaved']);
// Với priority tùy chỉnh (chạy sau các hook priority 10)
add_action('init', function () {
// Chạy sau các handler có priority 10
}, 20);
// Nhận nhiều tham số từ do_action
add_action('user_created', function ($userId, $userData) {
// xử lý
}, 10, 2); // accepted_args = 2