Khắc phục lỗi không phân trang khi dùng hàm query_posts trong WordPress khi dùng Permalink

Hôm nay, mình dùng hàm query_posts để customize số bài post sẽ được hiển thị trên một page. Đoạn mã của mình bên dưới:

$cat_id = the_category_ID($echo=false);
query_posts('cat='.$cat_id.'&posts_per_page=1');
while (have_posts()) {
    the_post();
    the_content();
}
echo posts_nav_link();       

Mọi thứ đều ổn cả ngoại trừ việc bấm Next Page nó luôn luôn nằm ở trang số 2 :(

Thế là mình ngồi google thì mình thấy bài viết này

Mình cải tiến code lên như sau:

$cat_id = the_category_ID($echo=false);
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts('cat='.$cat_id.'&posts_per_page=1&paged='.$paged);
while (have_posts()) {
    the_post();
    the_content();
}
echo posts_nav_link();       

Tuy nhiên, kết quả vẫn như thế :(

Mình phát hiện ra là mình dùng permalink nên các link được generate ra không có parameter paged mà là page. Mình sửa lại code như sau:

$cat_id = the_category_ID($echo=false);
$paged = (get_query_var('page')) ? get_query_var('page') : 1;
query_posts('cat='.$cat_id.'&posts_per_page=1&paged='.$paged);
while (have_posts()) {
    the_post();
    the_content();
}
echo posts_nav_link();       

Tuy nhiên, nó vẫn như thế. Mình debug hàm posts_nav_link() để xem nó work như thế nào. Mình phát hiện 2 hàm get_next_posts_link() và get_previous_posts_link() không chạy đúng bởi vì biến global $paged luôn có gì trị là 0. Thế là mình cải thiện đoạn mã trên như sau:

$cat_id = the_category_ID($echo=false);
global $paged;
$paged = (get_query_var('page')) ? get_query_var('page') : 1;
query_posts('cat='.$cat_id.'&posts_per_page=1&paged='.$paged);
while (have_posts()) {
    the_post();
    the_content();
}
echo posts_nav_link();       

Ở đoạn mã trên, mình cập nhật giá trị của global $paged. Thế là lỗi được khắc phục.

Chúc code vui :D


One comment

  1. Bạn có thể cho mình hỏi 1 vấn đề được ko?
    Mình đang dùng cái WP-PageNavi để phân trang, ko custom link.
    khi gọi hàm mình kèm theo tham sô page.Kết quả trang 1,2 link bình thường, nhưng bắt đầu ở trang thứ 3 thì lại ko tìm thấy. Bạn có thể giúp mình đc ko? Cảm ơn bạn nhìu

Leave a Reply

Your email address will not be published. Required fields are marked *