- 1. Request bắt đầu: PHP nhận yêu cầu từ web server
- 2. Bootstrap: khởi tạo môi trường WordPress
- 3. Load plugin và theme
- 4. Routing và Query: xác định nội dung cần hiển thị
- 5. Load Template Hierarchy
- 6. Rendering: kết hợp dữ liệu và template
- 7. Output: gửi dữ liệu ra trình duyệt
- 8. Tổng kết vòng đời request
- Kết luận
1. Request bắt đầu: PHP nhận yêu cầu từ web server
Khi người dùng truy cập một URL, web server (Apache, Nginx hoặc LiteSpeed) nhận request và chuyển đến file index.php trong thư mục gốc của WordPress. Đây là điểm vào (entry point) cho toàn bộ hệ thống.
Ví dụ với Nginx, cấu hình thường có dạng:
location / {
try_files $uri $uri/ /index.php?$args;
}
Khi file tĩnh không tồn tại (ví dụ /wp-content/uploads/), request sẽ được chuyển sang PHP-FPM để thực thi index.php.
2. Bootstrap: khởi tạo môi trường WordPress
File index.php gọi wp-blog-header.php, sau đó load wp-load.php, nơi bắt đầu quá trình bootstrap toàn bộ hệ thống:
- Nạp file
wp-config.php– thiết lập hằng số, kết nối database. - Nạp
wp-settings.php– khởi tạo biến toàn cục, include các core file nhưplugin.php,functions.php. - Đăng ký các hook hệ thống và nạp plugin được kích hoạt.
Giai đoạn này cũng khởi tạo kết nối database thông qua lớp wpdb và load các option có cờ autoload = 'on' hoặc 'auto' vào biến $alloptions. Đây là bước có ảnh hưởng lớn tới tốc độ khởi tạo của mỗi request.
3. Load plugin và theme
Sau khi môi trường WordPress được khởi tạo, hệ thống lần lượt nạp:
- Các plugin được kích hoạt từ bảng
wp_options(optionactive_plugins). - Nếu là multisite, nạp thêm plugin mạng (mu-plugins).
- File
functions.phpcủa theme đang hoạt động (theme + child theme nếu có).
Trong giai đoạn này, WordPress chạy hàng loạt hook quan trọng như plugins_loaded, after_setup_theme, và init. Đây là nơi lập trình viên nên đăng ký custom post type, taxonomy, REST API endpoint, hoặc enqueue script.
4. Routing và Query: xác định nội dung cần hiển thị
Sau khi môi trường đã sẵn sàng, WordPress bắt đầu xác định trang nào cần hiển thị bằng cách phân tích URL (slug, query string, rewrite rule). Quá trình này diễn ra trong lớp WP_Query:
- WordPress so khớp URL với bảng rewrite rules.
- Tạo đối tượng
$wp_querytương ứng với loại nội dung: trang chủ, bài viết, chuyên mục, tìm kiếm, 404, v.v… - Thực hiện truy vấn SQL qua lớp
wpdbđể lấy dữ liệu post, meta, term, và comment.
Đây là giai đoạn tốn tài nguyên nhất nếu site có nhiều plugin, taxonomy phức tạp hoặc thiếu index database. Việc tối ưu WP_Query hoặc cache đúng cách có thể giảm thời gian tải trang đáng kể.
5. Load Template Hierarchy
Khi đã có dữ liệu, WordPress xác định file template tương ứng để render. Hệ thống tìm kiếm template theo thứ tự ưu tiên (template hierarchy). Ví dụ:
- Đối với một bài viết:
single-{post-type}.php→single.php→index.php - Đối với trang:
page-{slug}.php→page.php→index.php - Đối với category:
category-{slug}.php→category.php→archive.php→index.php
Hàm chịu trách nhiệm chọn template là get_query_template(). Sau đó WordPress nạp template và truyền dữ liệu post vào trong vòng lặp have_posts().
6. Rendering: kết hợp dữ liệu và template
WordPress bắt đầu sinh HTML bằng cách render file template. Trong template, các hàm như the_title(), the_content(), get_post_meta() truy xuất dữ liệu từ database thông qua WP_Query hoặc cache object.
Nếu theme hoặc plugin có hook vào the_content hay wp_head, đây là lúc các hàm filter và action được thực thi để thêm script, meta tag hoặc shortcode.
7. Output: gửi dữ liệu ra trình duyệt
Sau khi HTML được sinh ra, WordPress gửi nội dung này về trình duyệt thông qua output buffer của PHP. Nếu có plugin cache như WP Super Cache hoặc LiteSpeed Cache, response có thể được lưu lại để phục vụ cho request sau mà không cần khởi tạo toàn bộ quá trình trên.
Trước khi kết thúc, WordPress kích hoạt các hook cuối cùng như shutdown và đóng kết nối database.
8. Tổng kết vòng đời request
Client → Web Server → PHP (index.php)
↓
wp-load.php → wp-config.php → wp-settings.php
↓
Load Plugin & Theme → Hook init
↓
Routing → WP_Query → Database
↓
Template Hierarchy → Render HTML
↓
Output → Browser
Toàn bộ chuỗi này diễn ra chỉ trong vài trăm mili-giây, nhưng mỗi bước đều có thể là điểm nghẽn nếu không được tối ưu đúng cách. Hiểu vòng đời request giúp bạn biết nên can thiệp ở đâu: thêm cache, hook đúng giai đoạn, và kiểm soát tài nguyên hiệu quả hơn.
Kết luận
Vòng đời của một request WordPress bao gồm nhiều tầng xử lý — từ PHP, database, plugin, theme, cho đến output cuối cùng. Nắm vững luồng hoạt động này giúp lập trình viên:
- Hiểu tại sao website chậm và xác định chính xác điểm nghẽn.
- Tối ưu database, autoload và truy vấn hợp lý.
- Viết code gọn, hook đúng thời điểm, và sử dụng bộ nhớ hiệu quả hơn.
Một lập trình viên WordPress giỏi không chỉ biết dùng API, mà còn hiểu sâu cách WordPress vận hành bên trong để tối ưu từng request ngay từ gốc.
Bình luận