feat: add UMass Amherst theme support, implement HTML snippet management system, and update page rendering logic

This commit is contained in:
2026-07-06 23:50:55 +07:00
parent 3dc5a03484
commit e6d98edc45
364 changed files with 9967 additions and 36960 deletions
+31 -20
View File
@@ -41,30 +41,41 @@ Privacy Thiết lập trang chính sách bảo mật cho website.
PHẦN 2: CÁC HÀM PHP & HOOKS ĐỂ PHÁT TRIỂN TRANG ADMIN (DEVELOPER API)
Nếu bạn đang lập trình tùy biến trang admin (hoặc xây dựng CMS tương tự), WordPress cung cấp bộ API để tạo và kiểm soát trang admin sau:
1. Các hàm tạo Menu & Submenu trong Admin
add_menu_page(): Thêm một Menu chính mới (cấp cao nhất) ở thanh sidebar bên trái.
add_submenu_page(): Thêm một Menu con (Submenu) vào dưới một Menu chính bất kỳ.
(done)1. Các hàm tạo Menu & Submenu trong Admin
- `add_menu_page()`: Thêm một Menu chính mới (cấp cao nhất) ở thanh sidebar bên trái.
- **Spring Boot Equivalent**: `AdminMenuManager.addMenuPage(...)` - Tạo menu động (Dynamic Menu) và hiển thị trong phần "Extensions" của sidebar.
- `add_submenu_page()`: Thêm một Menu con (Submenu) vào dưới một Menu chính bất kỳ.
- **Spring Boot Equivalent**: `AdminMenuManager.addSubmenuPage(...)`
Các hàm phái sinh viết nhanh (Helper functions):
add_options_page(): Thêm trang con vào menu Settings (Cài đặt).
add_theme_page(): Thêm trang con vào menu Appearance (Giao diện).
add_plugins_page(): Thêm trang con vào menu Plugins.
add_users_page(): Thêm trang con vào menu Users (Thành viên).
add_dashboard_page(): Thêm trang con vào menu Dashboard (Bảng điều khiển).
add_management_page(): Thêm trang con vào menu Tools (Công cụ).
2. Các Action Hooks quan trọng trong Admin
- `add_options_page()`: Thêm trang con vào menu Settings. (Dùng `AdminMenuManager.addOptionsPage`)
- `add_theme_page()`: Thêm trang con vào menu Appearance.
- `add_plugins_page()`: Thêm trang con vào menu Plugins.
- `add_users_page()`: Thêm trang con vào menu Users.
- `add_dashboard_page()`: Thêm trang con vào menu Dashboard.
- `add_management_page()`: Thêm trang con vào menu Tools.
(done)2. Các Action Hooks quan trọng trong Admin
admin_menu: Chạy khi cấu trúc menu admin đang được khởi tạo. Đây là nơi bắt buộc để gọi các hàm add_menu_page() và add_submenu_page().
admin_init: Chạy khi trang admin được tải và khởi tạo. Thường dùng để đăng ký cấu hình (Settings API), kiểm tra quyền hoặc xử lý form gửi lên.
admin_enqueue_scripts: Hook chuẩn duy nhất để tải thêm file CSS và JavaScript tùy chỉnh vào trang quản trị (tránh làm ảnh hưởng đến các plugin khác).
admin_post_{action} & admin_post_nopriv_{action}: Xử lý các yêu cầu gửi Form (POST/GET) từ trang quản trị một cách an toàn.
3. Các hàm kiểm tra Phân quyền & Trạng thái
is_admin(): Kiểm tra xem trang hiện tại người dùng đang truy cập có thuộc phân hệ quản trị (backend /wp-admin/) hay không.
current_user_can( $capability ): Kiểm tra người dùng hiện tại có đủ quyền thực hiện hành động hay không (ví dụ: current_user_can('manage_options') để kiểm tra quyền Admin).
get_current_screen(): Lấy thông tin chi tiết về trang admin hiện tại đang hiển thị (ID, Base, Post Type).
4. Settings API (Quản lý và lưu trữ thiết lập)
register_setting(): Đăng ký một tùy chọn (option) mới trong cơ sở dữ liệu để lưu trữ cấu hình.
add_settings_section(): Tạo ra một vùng chứa (section) trên trang để gom nhóm các trường cài đặt.
add_settings_field(): Thêm một trường nhập liệu (Input, Checkbox, Select) vào vùng chứa đã tạo.
settings_fields() & do_settings_sections(): Các hàm render giao diện form cấu hình tự động và tạo mã bảo mật Token (Nonce).
(done)3. Các hàm kiểm tra Phân quyền & Trạng thái
- `is_admin()`: Kiểm tra xem trang hiện tại người dùng đang truy cập có thuộc phân hệ quản trị (backend `/manage/`) hay không.
- **Spring Boot Equivalent**: `AdminContext.isAdmin(request)` hoặc `adminCtx.isAdminRequest()` trong Thymeleaf.
- `current_user_can( $capability )`: Kiểm tra người dùng hiện tại có đủ quyền thực hiện hành đng hay không (ví dụ: `current_user_can('manage_options')` để kiểm tra quyền Admin).
- **Spring Boot Equivalent**: `AdminContext.currentUserCan(capability)` hoặc `adminCtx.currentUserCan(capability)` trong Thymeleaf. Sử dụng `CAPABILITY_TO_ROLE` map để ánh xạ sang Spring Security Roles.
- `get_current_screen()`: Lấy thông tin chi tiết về trang admin hiện tại đang hiển thị (ID, Base, Post Type).
- **Spring Boot Equivalent**: `AdminContext.getCurrentScreen(request)` hoặc `adminScreen` trong Thymeleaf. Trả về `AdminScreen` record chứa `id`, `base`, `section`, và `entityId`.
(done)4. Settings API (Quản lý và lưu trữ thiết lập)
(done)4. Settings API (Quản lý và lưu trữ thiết lập)
- `register_setting()`: Đăng ký một tùy chọn (option) mới trong cơ sở dữ liệu để lưu trữ cấu hình.
- **Spring Boot Equivalent**: `AdminSettingsManager.registerSetting(...)` đảm bảo setting có giá trị mặc định lúc khởi tạo. `SettingService` tự động lưu trữ dạng Key-Value tương đương bảng `wp_options`.
- `add_settings_section()`: Tạo ra một vùng chứa (section) trên trang để gom nhóm các trường cài đặt.
- **Spring Boot Equivalent**: `AdminSettingsManager.addSettingsSection(...)` tạo section cấu hình logic.
- `add_settings_field()`: Thêm một trường nhập liệu (Input, Checkbox, Select) vào vùng chứa đã tạo.
- **Spring Boot Equivalent**: `AdminSettingsManager.addSettingsField(...)` với `SettingsField` (model chứa metadata về type, options) thay vì render HTML cứng bằng callback.
- `settings_fields()` & `do_settings_sections()`: Các hàm render giao diện form cấu hình tự động và tạo mã bảo mật Token (Nonce).
- **Spring Boot Equivalent**: Dùng Thymeleaf fragment `<div th:replace="~{fragments/settings-api :: do_settings_sections('general')}"></div>`. Security token (CSRF) do Spring Security sinh tự động.
TIP
Ứng dụng cho dự án Spring Boot hiện tại: Nếu bạn đang chuyển đổi hoặc xây dựng mới phân hệ Quản trị (Admin Panel) cho dự án website bệnh viện S.I.S Cần Thơ, bạn có thể ánh xạ các chức năng của WordPress như trên thành các Controller trong Spring Boot (ví dụ: @Controller @RequestMapping("/admin")), chia các chức năng quản lý thành các REST API và phân quyền truy cập thông qua Spring Security (tương đương với current_user_can trong WordPress).
Ứng dụng cho dự án Spring Boot hiện tại: Nếu bạn đang chuyển đổi hoặc xây dựng mới phân hệ Quản trị (Admin Panel) cho dự án website bệnh viện S.I.S Cần Thơ, bạn có thể ánh xạ các chức năng của WordPress như trên thành các Controller trong Spring Boot (ví dụ: @Controller @RequestMapping("/manage")), chia các chức năng quản lý thành các REST API và phân quyền truy cập thông qua Spring Security (tương đương với current_user_can trong WordPress). Đã triển khai `AdminContext` (như một @Service) và `AdminScreen` record, có thể inject vào mọi Thymeleaf template thông qua `GlobalControllerAdvice`.