Menu

Enqueue trong WordPress load js css đúng chuẩn

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()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 - Enqueue trong WordPress load js css đúng chuẩn

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 - Enqueue trong WordPress load js css đúng chuẩn

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 chuẩn wordpress - Enqueue trong WordPress load js css đúng chuẩ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.

Bài trước Ajax trong wordpress Bài tiếp theo Phân trang trong wordpress và tùy chỉnh phân trang

Đánh giá từ khách hàng

Tổng hợp trải nghiệm thực tế từ khách đã lưu trú.

5,0 /5

Tuyệt vời

9 đánh giá

Tuyệt vời
9
Rất tốt
0
Trung bình
0
Tạm được
0
Tệ
0
Chất lượng nội dung
5,0
Áp dụng thực tế
5,0
Trình bày bài viết
5,0
Giá trị kiến thức
5,0
ĐT

Đỗ Thị Thảo

Đã đánh giá vào 14/02/2026

5,0 /5

Bài viết rất chi tiết và hữu ích cho người mới bắt đầu như mình. Mình đang tìm hiểu về cách tạo theme WordPress và bài viết này đã giúp mình hiểu rõ hơn về cách enqueue. Mình sẽ thử áp dụng vào dự án của mình. Cảm ơn tác giả rất nhiều ạ!

TM

Trương Công Minh

Đã đánh giá vào 14/02/2026

5,0 /5

Mình làm SEO và rất quan tâm đến tốc độ website. Bài viết này giúp mình hiểu rõ hơn về cách enqueue ảnh hưởng đến hiệu suất website. Mình sẽ yêu cầu team dev của mình áp dụng cách này để cải thiện Core Web Vitals.

HV

Hoàng Quốc Việt

Đã đánh giá vào 14/02/2026

5,0 /5

Bài viết quá chất lượng! Mình đã áp dụng cách enqueue này vào dự án của mình và thấy website chạy nhanh hơn hẳn. Đặc biệt là đoạn code ví dụ rất dễ copy và chỉnh sửa. Highly recommend cho các bạn làm WordPress!

VM

Vũ Thị Mai

Đã đánh giá vào 14/02/2026

5,0 /5

Thông tin hữu ích quá! Mình rất thích cách tác giả giải thích về dependency và versioning. Trước giờ mình cứ làm theo cảm tính, giờ thì đã hiểu rõ hơn về nguyên tắc hoạt động rồi. Cảm ơn bạn nhiều!

ĐT

Đặng Thanh Tùng

Đã đánh giá vào 14/02/2026

5,0 /5

Mình là designer và cũng cần biết về code. Bài viết này giúp mình hiểu rõ hơn về cách enqueue trong WordPress. Đặc biệt là phần load JS ở header và footer khác nhau thế nào, rất hữu ích. Mình sẽ chia sẻ cho team dev của mình.

NA

Nguyễn Hoàng Anh

Đã đánh giá vào 14/02/2026

5,0 /5

Bài viết rất hay và đầy đủ. Cách trình bày rõ ràng, dễ hiểu. Ví dụ về website doanh nghiệp dùng Google Fonts và Bootstrap rất thực tế. Mình sẽ áp dụng ngay vào dự án sắp tới. À, cho mình hỏi, có plugin nào giúp quản lý enqueue dễ dàng hơn không bạn?

PH

Phạm Thu Hương

Đã đánh giá vào 14/02/2026

5,0 /5

Mình làm marketing và thường xuyên phải làm việc với website WordPress. Bài viết này giúp mình hiểu rõ hơn về cách các developer tối ưu website. Giờ mình có thể trao đổi với team dev hiệu quả hơn rồi. Thanks!

LN

Lê Văn Nam

Đã đánh giá vào 14/02/2026

5,0 /5

Mình mới học WordPress và đang làm một theme đơn giản. Bài này giúp mình hiểu rõ hơn về cách quản lý CSS và JS. Đoạn code ví dụ rất dễ hiểu và có thể áp dụng ngay. Cho mình hỏi thêm, nếu mình muốn dequeue một script của plugin thì làm thế nào ạ?

TB

Trần Thị Bích

Đã đánh giá vào 14/02/2026

5,0 /5

Bài viết quá chi tiết và hữu ích! Trước đây mình toàn chèn trực tiếp CSS vào header.php, giờ mới biết cách enqueue chuẩn chỉnh thế này. Đặc biệt thích đoạn nói về versioning để tránh cache, đúng là vấn đề mình hay gặp phải. Cảm ơn tác giả!

Viết đánh giá của bạn

Vui lòng đăng nhập để gửi đánh giá.
Chất lượng nội dung
Áp dụng thực tế
Trình bày bài viết
Giá trị kiến thức

Tối đa 5 ảnh, mỗi ảnh không quá 5MB.

    Tìm kiếm... Ctrl+K

    Kira ChatBox - Trợ lý AI