Viết lại đường dẫn phân trang pagination_links

Quảng cáo
Ads_ngang
Website dinhthuanit.com có bài Viết lại đường dẫn phân trang pagination_links

Trong wordpress bạn đã biết cách tạo phân trang với plugin wp-pagenavi để thêm liên kết phân trang cho danh sách các bài viết ở trang chủ, category, tag..archive. Liên kết phân trang có dạng /page/n (n là chỉ số trang hiện tại), WordPress sử dụng tên biến ‘page’ để xác định chỉ số phân trang cần lấy dữ liệu, bạn có thể hiển thị liên kết phân trang bằng cách chèn vào hàm sau trong template.

 wp_pagenavi();  

Bạn cũng đều có thể thay thay tên biến /page/ mặc định khi tạo phân trang trong wordpress, với phương thức viết lại đường dẫn URL. WordPress cung cấp cho chúng ta hàm paginate_links giúp tùy biến liên kết phân trang 1 cách dễ dàng. Thông thường bạn sẽ sử dụng đoạn code sau đây để tạo phân trang cho dữ liệu vòng lặp loop.

 $big = 999999999; $pagination = paginate_links( array( 'base' =>  str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'format' =>  '?paged=%#%', 'current' =>  max($paged,1), 'total' => $data-> max_num_pages, //$wp_query-> max_num_pages, 'prev_text'=> ' <  '> > ', ) );  

Giả sử tôi muốn đổi tên slug cho chỉ số trang, thí dụ tôi muốn đổi ‘/page/2’ thành ‘/trang/2’ thì làm thế nào, bài viết này mình sẽ chỉ dẫn làm điều này. Trước tiên bạn phải tạo thêm cấu trúc đường dẫn (Rewrite Rule). Ví dụ mình sẽ sử dụng trang category làm điển hình, wordpress hiển thị trang danh mục sử dụng cấu trúc như sau:
category/(.+?)/page/?([0-9]{1,})/?$
Và bản tính trỏ vào URL:
index.php?category_name=$matches[1]&paged=$matches[2]

Chúng ta cần sửa lại slug ‘page’ và tham số ‘paged’ trên URL ở trên, thêm rewrite rules trong functions.php với hàm add_rewrite_rule giống như sau:

 // add `author_more` to query vars add_filter( 'init', 'add_author_more_query_var' ); function add_author_more_query_var() { global $wp; $wp-> add_query_var( 'chiso_trang' ); add_rewrite_rule( 'category/(.+?)/trang/?([0-9]{1,})/?$', 'index.php?category_name=$matches[1]&chiso_trang=$matches[2]', 'top' ); }  

Lưu ý: vì chúng ta thay tên phân đoạn url ‘page’ thành ‘trang’ do đấy bạn thay URL của wordpress thành:
category/(.+?)/trang/?([0-9]{1,})/?$

Và Để tránh đụng độ, mình đổi cả tên tham số khác với cấu trúc category cũ, tránh gặp lỗi. Chúng ta khai báo tham số mới bởi phương thức add_query_var từ đối tượng $wp .

Để url cũng đều có thể hoạt động bạn cần lưu lại cấu trúc permalink, truy cập Settings > Permalinks nhấn lưu thay đổi. Hoặc gọi hàm flush_rewrite_rules();

Lúc này trong file bạn định vị chỉ số trang hiện tại thay vì sử dụng tham số ‘page’ bạn sử dụng tên biến mới ở trên, Ví dụ:

 if(get_query_var('chiso_trang')) { $paged = get_query_var('chiso_trang'); }  

Bây giờ trở về sửa tham số ‘base’ của hàm tạo liên kết paginate_links, nên nhớ cấu trúc pagination của chúng ta có dạng /trang/%#%

 $big = 999999999; $base = preg_replace('#/trang/.+#','/trang/%#%', get_pagenum_link( $big )); $pagination = paginate_links( array( 'base' =>  $base, 'format' =>  '/trang/%#%/', 'current' =>  max($paged,1), 'total' => $wp_query-> max_num_pages, //$wp_query-> max_num_pages, 'prev_text'=> ' <  '> > ', ) );  

Chúc bạn thành công!

Nếu bạn thích bài viết này, hãy ủng hộ chúng tôi bằng cách đăng ký nhận bài viết mới ở bên dưới và hãy nhớ chia sẻ kiến thức này với bạn bè của bạn nhé. Bạn cũng cũng đều có thể theo dấu blog này trên Twitter và Facebook

Bài viết Viết lại đường dẫn phân trang pagination_links được tổng hợp và biên tập bởi: dinhthuanit.com. Mọi ý kiến đóng góp và phản hồi vui lòng gửi Liên Hệ cho dinhthuanit.com để điều chỉnh. dinhthuanit.com xin cảm ơn.

Bài Viết Liên Quan


Bài Viết Khác


Quảng cáo
Ads_ngang