Vì sao CPT và ACF dễ gây nặng?
Lý do chính: Dữ liệu ACF được lưu trong bảng postmeta, khi số lượng lớn sẽ dẫn đến nhiều truy vấn meta_query. Ngoài ra, việc lạm dụng acf_form() hay lặp nhiều field group cũng góp phần làm chậm site.
Mẹo tối ưu khi tạo Custom Post Type
| Hành động | Giải thích |
|---|---|
Đặt 'has_archive' => false nếu không cần |
Tránh tạo archive page không dùng đến (giảm truy vấn rewrite + query) |
Không dùng supports => ['editor'] nếu không cần |
Tránh render trình soạn thảo thừa trong admin |
| Tắt REST API nếu không dùng | 'show_in_rest' => false sẽ giảm expose + tăng bảo mật |
Mẹo tối ưu khi dùng ACF
- Chỉ tạo field group áp dụng đúng nơi cần dùng – tránh “show if post type = all”
- Dùng
get_field()thay vìthe_field()để kiểm soát output - Sử dụng
acf-jsonđể lưu field group vào file – giảm query DB - Tránh lồng repeater nhiều tầng nếu không cần thiết
- Dùng
lazyloadhoặcAJAXđể nạp các field nặng hoặc ít dùng
Kỹ thuật nâng cao: preload ACF với update_post_meta
Nếu bạn hiển thị ACF ở frontend nhưng không cần sửa, hãy preload dữ liệu vào meta gốc thay vì gọi get_field() mỗi lần load.
// preload trong quá trình save
add_action('save_post', function($post_id) {
$value = get_field('custom_field', $post_id);
update_post_meta($post_id, '_preload_custom_field', $value);
});
Sau đó chỉ cần gọi get_post_meta($post_id, '_preload_custom_field', true) để hiển thị nhanh hơn.
Lưu ý về admin UX
- Ẩn các field ACF không cần thiết bằng CSS hoặc JS
- Giảm số lượng field bằng cách gom nhóm logic
- Tạo layout ACF hợp lý (tabs, accordion) để tránh lag form
Kết luận
Sức mạnh của CPT và ACF đi kèm với trách nhiệm tối ưu. Khi bạn dùng đúng cách, hệ thống sẽ vừa linh hoạt vừa nhẹ nhàng.
Hãy xem lại các field, post type hiện tại của bạn – liệu có đang dùng đúng và đủ chưa?
Bình luận