Giới thiệu về add_rewrite_rule trong WordPress

Giới thiệu về add_rewrite_rule trong WordPress

Trong WordPress, các URL thân thiện với người dùng (human-readable URLs) đóng vai trò quan trọng trong SEO và trải nghiệm người dùng. Mặc dù WordPress cung cấp các cấu trúc permalink cơ bản, nhưng đôi khi bạn cần phải tạo ra các quy tắc URL tùy chỉnh để xử lý các đường dẫn đặc biệt hoặc các chức năng riêng biệt. Để làm điều này, bạn có thể sử dụng hàm add_rewrite_rule. Hàm add_rewrite_rule cho phép bạn thêm các quy tắc rewrite (viết lại URL) tùy chỉnh vào hệ thống của WordPress, giúp xử lý các URL đặc biệt hoặc thay đổi cấu trúc URL theo nhu cầu của bạn.

Cách hoạt động của add_rewrite_rule#

WordPress sử dụng mod_rewrite của Apache (hoặc tương tự nếu dùng Nginx) để xử lý các URL. add_rewrite_rule là một cách để bạn khai báo các quy tắc tùy chỉnh, mà WordPress sẽ sử dụng để định tuyến và xử lý các URL cụ thể.

Cấu trúc của add_rewrite_rule#

Cú pháp cơ bản của hàm add_rewrite_rule như sau:
add_rewrite_rule( 
    $regex,  // Biểu thức chính quy để xác định URL
    $query,  // Câu lệnh query để xử lý URL
    $position = 'top' // Vị trí của quy tắc trong danh sách các quy tắc (top / bottom)
);
  • $regex: Đây là biểu thức chính quy (regular expression) mà bạn muốn sử dụng để kiểm tra URL người dùng truy cập. Ví dụ: ^product/([^/]+)/?$ có thể dùng để xử lý URL của sản phẩm.
  • $query: Câu lệnh query dùng để truy vấn WordPress và trả về nội dung phù hợp. Đây là phần mà WordPress sẽ dùng để xác định hành động, ví dụ như index.php?pagename=product&product_id=$matches[1].
  • $position: Tùy chọn này xác định vị trí của quy tắc mới trong danh sách các quy tắc rewrite. Giá trị mặc định là 'top', có nghĩa là quy tắc của bạn sẽ được đặt ở đầu danh sách. Bạn cũng có thể sử dụng 'bottom' để đặt quy tắc của mình ở cuối danh sách các quy tắc rewrite hiện có.

Ví dụ về cách sử dụng add_rewrite_rule#

Ví dụ 1: URL tùy chỉnh cho một sản phẩm

Giả sử bạn muốn tạo URL đẹp cho các sản phẩm trong cửa hàng của mình. Thay vì sử dụng một URL như https://example.com/?product_id=123, bạn muốn sử dụng URL dạng https://example.com/product/123. Để thực hiện điều này, bạn có thể sử dụng add_rewrite_rule để thêm một quy tắc rewrite tùy chỉnh:
function custom_rewrite_rule() {
    add_rewrite_rule(
        '^product/([^/]+)/?$', 
        'index.php?pagename=product&product_id=$matches[1]', 
        'top'
    );
}
add_action('init', 'custom_rewrite_rule');
Giải thích:
  • ^product/([^/]+)/?$: Đây là biểu thức chính quy, có nghĩa là nó sẽ kiểm tra bất kỳ URL nào bắt đầu bằng /product/ và theo sau đó là một chuỗi số hoặc chữ, chẳng hạn như 123.
  • index.php?pagename=product&product_id=$matches[1]: Đây là câu lệnh query mà WordPress sẽ sử dụng để xác định trang sản phẩm và truyền ID của sản phẩm vào.
  • 'top': Quy tắc được thêm vào đầu danh sách rewrite rules.
Sau khi thêm mã trên vào functions.php và lưu lại, bạn cần vào Cài đặt > Đường dẫn tĩnh và nhấn Lưu thay đổi để WordPress cập nhật lại các quy tắc rewrite.

Ví dụ 2: Tạo một URL thân thiện cho tác giả

Giả sử bạn muốn tạo một URL tùy chỉnh cho trang thông tin tác giả, thay vì sử dụng một URL như https://example.com/?author=1, bạn muốn sử dụng https://example.com/author/john-doe. Bạn có thể sử dụng add_rewrite_rule như sau:
function custom_author_rewrite() {
    add_rewrite_rule(
        '^author/([^/]+)/?$', 
        'index.php?author_name=$matches[1]', 
        'top'
    );
}
add_action('init', 'custom_author_rewrite');
Giải thích:
  • ^author/([^/]+)/?$: Kiểm tra các URL bắt đầu bằng /author/ và theo sau đó là tên của tác giả (ví dụ: john-doe).
  • index.php?author_name=$matches[1]: Chuyển hướng URL đó tới trang tác giả với tên tác giả là john-doe.

Làm mới Rewrite Rules#

Sau khi thêm các rewrite rules vào WordPress, bạn cần làm mới chúng để các thay đổi có hiệu lực. Cách làm là vào Cài đặt > Đường dẫn tĩnh trong WordPress và chỉ cần nhấn Lưu thay đổi mà không cần thay đổi bất kỳ cài đặt nào. Điều này sẽ kích hoạt lại các quy tắc rewrite của WordPress.

Thêm biến query tùy chỉnh vào query_vars#

Đôi khi, bạn cần sử dụng các tham số bổ sung trong query string để xử lý các URL tùy chỉnh. Để làm điều này, bạn cần thêm các tham số vào danh sách query_vars của WordPress. Ví dụ: Nếu bạn đang sử dụng product_id trong query string, bạn cần thêm product_id vào danh sách query_vars:
function add_custom_query_var($query_vars) {
    $query_vars[] = 'product_id';
    return $query_vars;
}
add_filter('query_vars', 'add_custom_query_var');

Sử dụng add_rewrite_rule trong Plugin hoặc Theme#

Hàm add_rewrite_rule có thể được sử dụng trong cả plugin và theme của bạn, tuy nhiên, bạn nên thêm các quy tắc rewrite này trong hàm init của WordPress để đảm bảo chúng được xử lý đúng cách khi WordPress khởi tạo.

Các lưu ý khi sử dụng add_rewrite_rule#

  1. Cập nhật Permalinks: Sau khi thêm hoặc sửa rewrite rules, luôn nhớ phải vào Cài đặt > Đường dẫn tĩnh và nhấn Lưu thay đổi để làm mới cấu trúc URL.
  2. Sử dụng Biểu thức Chính quy (Regex): Việc sử dụng biểu thức chính quy (regex) trong add_rewrite_rule yêu cầu bạn phải nắm vững cú pháp regex. Hãy chắc chắn kiểm tra kỹ các biểu thức trước khi triển khai.
  3. Sự kiện init: Đảm bảo thêm các quy tắc vào hook init của WordPress, vì đây là thời điểm mà các rewrite rules được xử lý.
  4. Tránh tạo xung đột URL: Đảm bảo rằng các URL bạn tạo không xung đột với các URL của WordPress đã có, chẳng hạn như các URL của bài viết, trang hoặc các phân loại (taxonomy).

Kết luận#

Hàm add_rewrite_rule trong WordPress là một công cụ mạnh mẽ giúp bạn tùy chỉnh và mở rộng các URL trong trang web của mình. Nó cho phép bạn tạo ra các đường dẫn đẹp, dễ nhớ và thân thiện với người dùng, đồng thời hỗ trợ các URL động để xử lý nội dung đặc biệt như sản phẩm, tác giả, hay các loại dữ liệu khác. Tuy nhiên, khi sử dụng add_rewrite_rule, hãy luôn kiểm tra kỹ các biểu thức chính quy và làm mới permalinks để đảm bảo rằng các thay đổi có hiệu lực. Nếu bạn muốn tạo một trang web có URL tùy chỉnh hoặc muốn tối ưu hóa SEO cho các trang đặc biệt, add_rewrite_rule là một công cụ không thể thiếu!

Bài viết liên quan