01/10/2018, 17:31

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 ...

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


0