Hoàng Web

Thiết Kế Website WordPress

  • Kho giao diện
  • Dịch Vụ
    • Thiết kế web giá rẻ
    • Thiết kế website WordPress
    • Hosting Miễn Phí 100GB
    • Tích hợp thanh toán MoMo, ViettelPay, Vietcombank, MB..
    • Tối ưu Google PageSpeed
    • Sửa lỗi nâng cấp website
    • Viết plugin WordPress
    • Code Tool theo yêu cầu
  • Bảng giá
  • Quy trình làm việc
  • Giới thiệu
  • Liên Lạc
Trang chủ » Wordpress » Viết lại đường dẫn phân trang pagination_links

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

Thứ Sáu, 14/08/2015 by Hoàng Quách

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

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ó thể thay đổi 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 một 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'=>'<<', next_text="">'>>', ) ); <!--',-->

Giả sử tôi muốn đổi tên slug cho chỉ số trang, ví 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ẽ hướng dẫn làm điều này. Trước tiên bạn cần 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 chất 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 đổi tên phân đoạn url ‘page’ thành ‘trang’ do đó 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ó 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 xác định 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ờ quay trở lại 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'=>'<<', next_text="">'>>', ) ); <!--',-->

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

Hãy cho mình biết suy nghĩ của bạn trong phần bình luận bên dưới bài viết này. Hãy theo dõi kênh chia sẻ kiến thức WordPress của Hoangweb trên Twitter và Facebook

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Chuyên mục: Wordpress Tìm kiếm: pagination_links, phân trang

Tôi giúp gì cho bạn?

HOÀNG WEB

Địa chỉ: Tây Sơn, Phường Quang Trung, Quận Đống Đa, Hà Nội

Hotline: 0987 342 124 – 0868 292 303 (8h:00 – 21h:00)

Email: [email protected]

Website: www.hoangweb.com

KẾT NỐI VỚI TÔI

  • Facebook
  • GitHub
  • YouTube

SẢN PHẨM

  • Plugin Thanh Toán Quét Mã QR Code Tự Động
  • WP2Speed – Tối ưu Google Speed
  • 23WebHost – Hosting Miễn Phí 100GB

LIÊN KẾT

  • Có nên thuê thiết kế website giá rẻ?
  • Hướng dẫn thanh toán
  • Chính sách hoàn tiền
  • Trung tâm hỗ trợ

Copyright © 2023 | All rights reserved | HOANG WEB
Mọi hình thức sao chép nội dung trên website này mà chưa được sự đồng ý đều là trái phép.