Trước khi chúng ta nhảy vào làm việc với WordPress nâng cao như tiếp cận WordPress Core và sử dụng nó, thì ít nhất chúng ta nên hiểu qua về cách mã nguồn WordPress làm các việc như xử lý dữ liệu, tiếp nhận request truy cập (khi ai đó truy cập hoặc làm một thao tác gì đó trên website được gọi là 1 request). Việc hiểu những khái niệm căn bản này rất có ích cho các bạn biết rõ thật sự WordPress là cái gì, chúng ta có thể làm được gì trong WordPress.
Nhưng bây giờ, chúng ta nên tự hỏi rằng mã nguồn WordPress có thể làm gì? Điểm danh sơ qua, ta thấy nó có thể làm:
Nhưng chúng ta có cảm thấy là các loại website trên đều có một điểm chung là lưu trữ nội dung nhập vào, quản lý nội dung và cho phép người truy cập xem nội dung không? Chúng ta gọi chung nó là CMS – Content Management System (hệ thống quản trị nội dung). Và WordPress là một mã nguồn PHP thuộc loại CMS.
Trong mã nguồn WordPress, nó đã được lập trình nhiều tính năng giúp bản thân nó có thể tương tác với cơ sở dữ liệu (database) như MySQL để giúp người sử dụng có thể lưu trữ dữ liệu mềm trên website. Tất cả các dữ liệu mềm được lưu trữ vào database sẽ bao gồm các nội dung văn bản được nhập vào website, các thiết lập (vì các thiết lập sẽ lưu dưới dạng một kiểu dữ liệu) và một số dữ liệu linh ta linh tinh khác.
Nếu các bạn có vào xem database thông qua phpMyAdmin hoặc các ứng dụng tương tự, bạn sẽ thấy WordPress có nhiều bảng dữ liệu để chứa các dữ liệu được lưu vào
Rồi sau đó, các tính năng trong mã nguồn sẽ tương tác với các bảng dữ liệu đó và đưa ra ngoài trình duyệt hiển thị dưới dạng HTML thông qua các tập tin đã được thiết lập khuôn mẫu trong theme (ta gọi là template). Những cái này có thể bây giờ bạn chưa hiểu nhưng từ từ bạn sẽ hiểu nó trong serie này.
Xem thêm: Cấu trúc database của WordPress và cách tối ưu
Khi một người truy cập vào website, WordPress sẽ tự động xử lý theo quy trình sau:
Tập tin index.php trong mã nguồn (không phải của theme hay plugin) được tải ra, sau đó nó sẽ truy xuất các tập tin cốt lõi khác như wp-config.php vốn để kết nối đến cơ sở dữ liệu, wp-settings.php,…. Bạn có thể mở tập tin index.php lên xem và lần mò theo các tập tin được nhúng vào sẽ biết được quy trình nó load theo thứ tự các tập tin.
Ở bước này, WordPress sẽ kết nối đến cơ sở dữ liệu được thiết lập trong wp-config.php, sau đó sẽ tiến hành tải những tính năng trong mã nguồn như /wp-include/functions.php, /wp-include/options.php,…nhằm nạp sẵn các chức năng cần thiết để có thể tiếp nhận những dữ liệu.
Và cũng trong bước này, toàn bộ các dữ liệu được lưu vào bảng wp_options
có giá trị ở cột autoload
là true
sẽ được lôi ra hết, dù thiết lập đó có được sử dụng hay không. Mục đích của bước này là mang sẵn các tuỳ chọn của website cùng các plugin để hỗ trợ cho các bước sau, đặc biệt là bước tải plugin để nó làm việc chính xác. Đó là lý do tại sao ở bài tối ưu bảng wp_options, mình có khuyên bạn nên xoá bớt các hàng dữ liệu không dùng đến ở bảng này để giảm thời gian tải.
Các plugin mà bạn đang kích hoạt trong website sẽ được tải ra ngay sau khi mã nguồn WordPress khởi động xong. Bởi vì các tính năng trong WordPress Core được sử dụng trong plugin thường sẽ được gắn vào hook init
(bạn tạm thời hiểu nó là một điểm neo để kích hoạt kịch bản nào đó) nên nó sẽ load ngay sau khi WordPress khởi động là vậy.
Lúc này, WordPress sẽ tiến hành dò tìm đến tập tin functions.php trong theme đang được kích hoạt để tải các tính năng mà người tạo ra theme đã khai báo ở đó. Vậy làm sao WordPress có thể hiểu được website đang dùng theme nào? Đó là ở bước 1, nó đã kết nối vào database và dựa theo khoá current_theme trong cột option_name tại bảng wp_options.
Đây là bước quan trọng để website của bạn có thể hiển thị nội dung ra bên ngoài, vì các nội dung sẽ được trả về sau khi các truy vấn gửi vào database. Nếu bạn muốn biết nó phân tích như thế nào thì xem tại đây.
Truy vấn nghĩa là một mệnh lệnh được gửi vào database nhằm lấy các thông tin mà truy vấn đó cần xem. Truy vấn ở đây là truy vấn SQL gửi vào MySQL Server.
Trước tiên, WordPress sẽ chạy hàm wp()
được thiết lập trong /wp-include/functions.php vốn để gọi phương thức $wp->main()
cho mục đích thiết lập truy vấn. Đối tượng $wp
được tạo ra bởi lớp WP trong /wp-include/class-wp.php.
/** * Set up the WordPress query. * * @since 2.0.0 * * @param string|array $query_vars Default WP_Query arguments. */ function wp( $query_vars = '' ) { global $wp, $wp_query, $wp_the_query; $wp->main( $query_vars ); if ( !isset($wp_the_query) ) $wp_the_query = $wp_query; }
Lúc này, phương thức $wp->parse_request()
sẽ được khởi động cho mục đích phân tích truy vấn dựa theo đường dẫn của website. Vì bạn biết rằng WordPress sẽ tự động sinh truy vấn dựa theo đường dẫn, ví dụ khi chúng ta vào http://domain.com/?p=123 thì WordPress sẽ gửi một truy vấn vào database để lấy dữ liệu của post mang số ID là 123.
Sau khi truy vấn được phân tích, WordPress sẽ làm việc tiếp theo là thiết lập các hàm điều kiện thông qua phương thức $wp_query->parse_query()
. Sau đó nó sẽ chuyển các truy vấn đã được tạo ra thành truy vấn bằng các lệnh SQL nhằm gửi đến MySQL để lấy dữ liệu bài viết bằng phương thức $wp_query->get_posts()
. Nếu database có dữ liệu, các bài viết sẽ được lấy về sau khi gửi truy vấn và nó sẽ được lưu vào đối tượng $wp_query
để nó sử dụng trong các vòng lặp cho việc hiển thị bài viết.
Trong quá trình gửi truy vấn này, nếu nó không tìm thấy dữ liệu thì sẽ phân tích và hiển thị báo lỗi 404.
Và cuối cùng là nó có dữ liệu, thì nó sẽ thiết lập biến $post
để sử dụng trong vòng lặp. Biến $post
là đối tượng chứa các dữ liệu của bài viết thông qua các thuộc tính. Phần này chúng ta sẽ đào sâu hơn ở phần tìm hiểu sâu về query và vòng lặp.
Sau khi nó đã có dữ liệu bài viết và các dữ liệu liên quan mà nó đã làm ở bước 4, thì nó sẽ tiến hành xử lý các tập tin template của theme thông qua cấu trúc template. Sau đó các nội dung và trang chủ của website sẽ được hiển thị dựa theo các template tags dưới dạng HTML. Phần này chúng ta sẽ tìm hiểu kỹ hơn ở bài sau.
Một câu hỏi được đặt ra, chúng ta có thể làm gì để can thiệp vào mã nguồn WordPress nhằm điều khiển nó hoạt động theo ý mình, hoặc hiểu theo cách khác là tạo thêm tính năng và thay đổi giao diện hiển thị.
Không phải tự nhiên mà mình kể chi tiết ra quy trình WordPress xử lý dữ liệu ra ở trên, mà nó sẽ giúp bạn dễ hiểu hơn ở phần này.
Trước tiên, chúng ta có thể can thiệp vào các tính năng của WordPress và tái tạo lại nó vốn đã được WordPress xử lý ở bước 1 như trên. Sở dĩ chúng ta có thể làm được là vì mã nguồn của WordPress được viết theo kiểu chúng ta có thể can thiệp gián tiếp vào nó và có thể tái tạo lại (thông qua các lớp – Class). Và các tính năng chúng ta tự tạo ra từ việc can thiệp vào mã nguồn có thể được khai báo với dạng plugin và nó sẽ được sử dụng ngay sau khi WordPress khởi động các chức năng cần thiết.
Thứ hai, chúng ta có thể can thiệp vào lớp WP_Query
để tự tạo một truy vấn riêng để lấy dữ liệu bất kỳ trong database (nhiều truy vấn có thể sử dụng bằng một hàm nào đó, như get_post_meta() chẳng hạn). Chúng ta ứng dụng WP_Query
nhiều nhất vào việc lấy dữ liệu các bài viết (bao gồm post, page, attachment,…).
Thứ ba, chúng ta có thể tạo ra theme, sau đó tự định tuỳ chỉnh lại các tập tin template trong đó để các nội dung của WordPress hiển thị ra theo đúng ý đồ của mình. Vì sau khi WordPress gửi truy vấn lấy dữ liệu, thì việc hiển thị ra thế nào là do các template quyết định, và trong template sẽ là các mã PHP kết hợp với HTML/CSS để hiển thị nó ra website.
Đó là những việc chúng ta có thể làm.
Câu hỏi hay đó, chúng ta đã biết qua cách WordPress tải như thế nào khi có lượt truy cập đi vào, rồi tuần tự các chức năng được thực thi ra và biết luôn các việc chúng ta có thể làm. Còn làm như thế nào, chúng ta sẽ tìm hiểu ở các phần sau trong serie Học WordPress nâng cao này.