Khi phát triển theme WordPress, nhiều lập trình viên vẫn thường chèn trực tiếp các file CSS và JavaScript vào file header.php hoặc footer.php. Mặc dù cách làm này có thể hoạt động, nhưng nó hoàn toàn không tuân theo kiến trúc chuẩn của WordPress. Nếu bạn đang xây dựng một theme cho một dự án thực tế, việc enqueue trong WordPress là điều bắt buộc để đảm bảo tính ổn định và hiệu suất.
Bài viết này sẽ đi sâu vào cơ chế enqueue, cách load Google Fonts, Bootstrap, cách phân biệt việc load JS ở header và footer, quản lý các dependency, tối ưu hiệu năng và cách triển khai sát với các dự án thực tế. Nếu bạn đang thực hiện một series lập trình theme hoặc triển khai một dự án production, đây là kiến thức nền tảng mà bạn không thể bỏ qua. Việc nắm vững cách enqueue trong WordPress sẽ giúp bạn xây dựng những website WordPress mạnh mẽ và dễ bảo trì.
WordPress cung cấp một hệ thống quản lý tài nguyên riêng thông qua các hàm wp_enqueue_style() và wp_enqueue_script(). Hệ thống này cho phép WordPress biết chính xác những file nào đang được tải, thứ tự tải của chúng và liệu chúng có phụ thuộc vào các file khác hay không. Enqueue trong WordPress giúp hệ thống quản lý tài nguyên một cách hiệu quả.
Nếu bạn sử dụng cách hard-code link trực tiếp như sau:
<link rel=”stylesheet” href=”style.css”>
Thì WordPress sẽ không thể:
- Kiểm soát thứ tự tải các file
- Tránh việc tải trùng lặp với các plugin khác
- Dequeue các file khi cần tối ưu
- Quản lý version để tránh lỗi cache
Do đó, enqueue trong WordPress không chỉ là một quy tắc, mà còn là nền tảng kiến trúc của toàn bộ hệ thống. Đây là một phần quan trọng để xây dựng các website WordPress có hiệu suất cao và dễ bảo trì. Việc nắm vững kiến thức này sẽ giúp bạn tạo ra những sản phẩm chất lượng và đáp ứng được yêu cầu của khách hàng.
Cách Enqueue trong WordPress để tối ưu website
Hook đúng để load tài nguyên
Tất cả các file CSS và JS frontend phải được gắn vào hook:
wp_enqueue_scripts
Ví dụ cơ bản:
add_action(‘wp_enqueue_scripts’, ‘theme_scripts’);
Đây là điểm bắt đầu cho mọi tài nguyên frontend của theme. Hook wp_enqueue_scripts cho phép bạn đăng ký và enqueue các script và stylesheet một cách chính xác và có hệ thống. Điều này giúp WordPress quản lý các tài nguyên của bạn một cách hiệu quả và tránh xung đột với các plugin khác. Việc sử dụng hook này là một phần quan trọng của việc phát triển theme WordPress chuyên nghiệp.

Hook wp_enqueue_scripts
Ví dụ thực tế: Website doanh nghiệp dùng Google Fonts và Bootstrap
Giả sử dự án của bạn cần:
- Font Be Vietnam Pro từ Google Fonts
- Bootstrap 5 từ CDN
- File style.css
- File responsive.css
- File main.js
Dưới đây là cách triển khai enqueue trong WordPress sát thực tế.
Enqueue Google Fonts
Không chèn link trực tiếp vào header. Thay vào đó:
wp_enqueue_style(‘google-fonts’,’https://fonts.googleapis.com/css2?family=Be+Vietnam+Pro:wght@400;500;600;700&display=swap’);
Việc enqueue giúp WordPress quản lý file, tránh load trùng nếu plugin cũng sử dụng Google Fonts. Khi bạn sử dụng hàm wp_enqueue_style() để enqueue Google Fonts, WordPress sẽ đảm bảo rằng font chỉ được tải một lần duy nhất, ngay cả khi nhiều plugin hoặc theme cùng sử dụng font đó. Điều này giúp giảm thiểu số lượng HTTP request và cải thiện tốc độ tải trang.
Enqueue Bootstrap CSS
wp_enqueue_style(‘bootstrap’,’https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css’);
Bootstrap nên được load trước CSS custom để đảm bảo thứ tự override chính xác. Việc load Bootstrap trước CSS custom đảm bảo rằng các style tùy chỉnh của bạn sẽ ghi đè lên các style mặc định của Bootstrap một cách chính xác. Điều này giúp bạn dễ dàng kiểm soát giao diện của website và đảm bảo rằng nó hiển thị đúng như mong muốn.
Bạn có thể tham khảo thêm về Bootstrap để biết thêm chi tiết.
Enqueue CSS của theme
wp_enqueue_style(‘theme-style’, get_template_directory_uri() . ‘/css/style.css’, array(‘bootstrap’), ‘1.0’);
Ở đây, array(‘bootstrap’) đảm bảo style.css chỉ load sau Bootstrap. Việc khai báo dependency này đảm bảo rằng file style.css của bạn chỉ được tải sau khi Bootstrap đã được tải xong. Điều này rất quan trọng vì file style.css của bạn có thể chứa các style ghi đè lên các style của Bootstrap, và nếu nó được tải trước Bootstrap, các style của bạn sẽ không có hiệu lực.
Enqueue JavaScript đúng chuẩn để website mượt mà
Load Bootstrap JS
wp_enqueue_script(‘bootstrap-js’,’https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js’,array(),’5.3.0′,true);
Tham số cuối cùng là true, nghĩa là load trước thẻ </body>. Việc này giúp trang web tải nhanh hơn bằng cách không chặn quá trình hiển thị nội dung.
Load JS chính của theme
wp_enqueue_script(‘theme-main’, get_template_directory_uri() . ‘/js/main.js’, array(‘bootstrap-js’), ‘1.0’, true);
main.js phụ thuộc bootstrap-js nên được khai báo dependency rõ ràng. Khi khai báo dependency, WordPress sẽ tự động đảm bảo rằng bootstrap-js được tải trước main.js. Nếu không khai báo dependency, có thể xảy ra lỗi JavaScript nếu main.js cố gắng sử dụng các hàm hoặc biến được định nghĩa trong bootstrap-js trước khi nó được tải.
Load JS ở Header và Footer khác nhau thế nào?
Load ở Header (false)
Nếu tham số cuối là false, file sẽ được load trong <head>.
Chỉ nên dùng khi:
- Script cần chạy trước khi DOM render
- Script thay đổi class của <html>
- Script chống FOUC
Nhược điểm là có thể gây render-blocking.
Load ở Footer (true)
Đây là cách tối ưu nhất cho phần lớn dự án.
- Trang hiển thị nhanh hơn
- Không chặn render
- Tăng điểm Lighthouse
Trong 90% trường hợp, JS nên load ở footer. Việc này giúp cải thiện trải nghiệm người dùng và hiệu suất SEO. Bạn có thể tìm hiểu thêm về render-blocking JavaScript để nắm rõ hơn vấn đề này.
Quản lý Dependency đúng cách trong WordPress
Dependency giúp WordPress tự động sắp xếp thứ tự load.
Ví dụ:
array(‘bootstrap-js’)
Nghĩa là script này chỉ load sau bootstrap-js.
Nếu không khai báo dependency, thứ tự load có thể sai và gây lỗi JavaScript. Việc quản lý dependency giúp bạn kiểm soát thứ tự tải các file JavaScript và đảm bảo rằng chúng được tải đúng thứ tự để tránh các lỗi không mong muốn.
Versioning và xử lý cache
Trong dự án thật, lỗi phổ biến là update CSS nhưng trình duyệt vẫn cache bản cũ.
Cách chuyên nghiệp là dùng filemtime():
filemtime(get_template_directory() . ‘/css/style.css’)
Mỗi khi file thay đổi, version sẽ tự động thay đổi theo timestamp. Điều này giúp trình duyệt nhận biết rằng file đã được cập nhật và tải phiên bản mới nhất, tránh tình trạng cache.

Versioning và Cache
Conditional Enqueue – Chỉ load khi cần
Không phải trang nào cũng cần tất cả JS.
Ví dụ chỉ load Google Map ở trang liên hệ:
if (is_page(‘lien-he’)) { wp_enqueue_script(‘map-js’,’link-to-map.js’,array(),null,true); }
Cách này giúp:
- Giảm request không cần thiết
- Tăng tốc độ tải trang
- Cải thiện Core Web Vitals
Việc chỉ tải các tài nguyên cần thiết giúp giảm thiểu lượng dữ liệu phải tải, cải thiện tốc độ tải trang và trải nghiệm người dùng. Đồng thời, nó cũng giúp cải thiện các chỉ số Core Web Vitals, một yếu tố quan trọng trong SEO.
Truyền dữ liệu từ PHP sang JS bằng wp_localize_script
Khi làm AJAX, bạn cần truyền ajax_url và nonce:
wp_localize_script(‘theme-main’,’theme_ajax’,array(‘ajax_url’=>admin_url(‘admin-ajax.php’),’nonce’=>wp_create_nonce(‘theme_nonce’)));
Trong JS có thể dùng:
theme_ajax.ajax_url
Đây là cách chuẩn khi triển khai AJAX trong theme WordPress. Hàm wp_localize_script() cho phép bạn truyền dữ liệu từ PHP sang JavaScript một cách an toàn và dễ dàng. Điều này rất hữu ích khi bạn cần sử dụng các biến PHP trong JavaScript, chẳng hạn như URL của file AJAX hoặc các giá trị nonce để bảo vệ chống lại các cuộc tấn công CSRF.
Ví dụ code Enqueue trong WordPress Cho Một Dự Án Thực Tế
Dưới đây là một ví dụ hoàn chỉnh về enqueue trong WordPress cho một website doanh nghiệp sử dụng Google Fonts, Bootstrap 5, CSS riêng, JS riêng và AJAX.
Đoạn code này có thể đặt trong file functions.php hoặc tách riêng trong /inc/enqueue.php để dễ quản lý.
function company_theme_assets() {
/**
* =========================
* CSS
* =========================
*/
// Google Fonts
wp_enqueue_style(
'google-fonts',
'https://fonts.googleapis.com/css2?family=Be+Vietnam+Pro:wght@400;500;600;700&display=swap',
array(),
null
);
// Bootstrap CSS
wp_enqueue_style(
'bootstrap',
'https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css',
array(),
'5.3.0'
);
// CSS chính của theme
wp_enqueue_style(
'theme-style',
get_template_directory_uri() . '/css/style.css',
array('bootstrap'),
filemtime(get_template_directory() . '/css/style.css')
);
// CSS responsive
wp_enqueue_style(
'theme-responsive',
get_template_directory_uri() . '/css/responsive.css',
array('theme-style'),
filemtime(get_template_directory() . '/css/responsive.css')
);
/**
* =========================
* JAVASCRIPT
* =========================
*/
// Bootstrap JS (load ở footer)
wp_enqueue_script(
'bootstrap-js',
'https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js',
array(),
'5.3.0',
true
);
// JS chính của theme
wp_enqueue_script(
'theme-main',
get_template_directory_uri() . '/js/main.js',
array('bootstrap-js'),
filemtime(get_template_directory() . '/js/main.js'),
true
);
/**
* =========================
* AJAX DATA
* =========================
*/
wp_localize_script(
'theme-main',
'theme_ajax',
array(
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('theme_nonce'),
'theme_url'=> get_template_directory_uri()
)
);
}
add_action('wp_enqueue_scripts', 'company_theme_assets');
Giải thích cấu trúc trong ví dụ
- CSS load theo thứ tự: Google Fonts → Bootstrap → Style chính → Responsive
- JS load ở footer: Không chặn render, tối ưu tốc độ
- Dependency rõ ràng: main.js phụ thuộc bootstrap-js
- filemtime(): Tự động đổi version khi cập nhật file
- wp_localize_script: Truyền ajax_url và nonce sang JavaScript
Trường hợp nên mở rộng thêm trong dự án lớn
- Conditional enqueue theo từng template
- Dequeue script của plugin nếu không cần
- Tách riêng enqueue cho admin
- Sử dụng preload cho font nếu tối ưu Core Web Vitals
Đây là một cấu trúc enqueue trong WordPress đủ dùng cho hầu hết dự án thực tế từ website doanh nghiệp, landing page đến hệ thống tin tức quy mô vừa. Khi dự án phát triển, bạn có thể mở rộng cấu trúc này để đáp ứng các yêu cầu phức tạp hơn.

enqueue trong wordpress đúng chuẩn
Những lỗi phổ biến khi Enqueue trong WordPress
- Hard-code CSS/JS trong header.php
- Load Bootstrap 2 lần
- Khai báo sai dependency
- Load jQuery CDN thay vì jQuery core
- Không version → lỗi cache
- Load toàn bộ script mọi trang
Những lỗi này có thể không gây crash ngay, nhưng sẽ tạo vấn đề khi dự án lớn dần. Việc tránh những lỗi này giúp bạn xây dựng những website WordPress ổn định và dễ bảo trì.
Kết luận
Enqueue trong WordPress không chỉ là cú pháp. Nó là cách quản lý tài nguyên theo đúng kiến trúc hệ thống. Khi làm dự án thực tế, việc load đúng thứ tự, đúng vị trí và đúng dependency sẽ giúp theme ổn định, tối ưu và dễ mở rộng.
Hãy luôn nhớ:
- Không nhúng trực tiếp vào header.php
- JS nên load ở footer nếu không cần thiết ở header
- Khai báo dependency rõ ràng
- Sử dụng version để tránh cache
- Chỉ load khi thật sự cần
Khi bạn hiểu và áp dụng đúng enqueue trong WordPress, theme của bạn sẽ đạt chuẩn production, tránh xung đột plugin và tối ưu hiệu năng ngay từ nền tảng. Hãy áp dụng những kiến thức này vào dự án của bạn để tạo ra những sản phẩm chất lượng và đáp ứng được yêu cầu của khách hàng.
FAQ về Enqueue trong WordPress: Tối ưu Load CSS và JS
Tại sao cần Enqueue trong WordPress thay vì chèn trực tiếp CSS/JS?
Enqueue giúp WordPress quản lý thứ tự tải, tránh trùng lặp, dễ dàng dequeue và quản lý version, đảm bảo tính ổn định và hiệu suất.
Hook nào được sử dụng để Enqueue CSS và JavaScript trong WordPress?
Hook `wp_enqueue_scripts` được sử dụng để enqueue tất cả các file CSS và JS cho frontend.
Làm thế nào để Enqueue Google Fonts trong WordPress đúng cách?
Sử dụng hàm `wp_enqueue_style()` để enqueue Google Fonts, giúp WordPress quản lý và tránh load trùng lặp.
Dependency trong Enqueue WordPress là gì và tại sao nó quan trọng?
Dependency là khai báo sự phụ thuộc giữa các file, giúp WordPress tự động sắp xếp thứ tự load, tránh lỗi JavaScript.
Nên load JavaScript ở Header hay Footer để tối ưu hiệu năng WordPress?
Nên load JavaScript ở Footer (tham số `true`) để trang hiển thị nhanh hơn, không chặn render và tăng điểm Lighthouse. Chỉ load ở Header khi script cần chạy trước khi DOM render.
Versioning trong Enqueue WordPress để làm gì và dùng hàm gì?
Versioning giúp trình duyệt tải phiên bản mới nhất của file CSS/JS sau khi cập nhật, tránh cache. Sử dụng hàm `filemtime()` để tự động tạo version theo thời gian chỉnh sửa file.
Conditional Enqueue là gì và khi nào nên sử dụng?
Conditional Enqueue là chỉ load CSS/JS trên các trang cần thiết, giúp giảm request không cần thiết, tăng tốc độ tải trang. Ví dụ, chỉ load Google Map script ở trang liên hệ.
Làm thế nào để truyền dữ liệu từ PHP sang JavaScript trong WordPress?
Sử dụng hàm `wp_localize_script()` để truyền dữ liệu như `ajax_url` và `nonce` từ PHP sang JavaScript một cách an toàn.