2017-09-28 21 views
6

Mặc dù sau đây chính xác the example in the codex, trang tôi đến khi nhấp vào liên kết pagited next (http://localhost:3000/my_project/news/page/2/) không tồn tại ("không tìm thấy trang").Chức năng phân trang không hoạt động trong WordPress

Tại sao?

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; echo 'paged = ' . $paged; 
$regular_posts = new WP_Query('posts_per_page=3&paged=' . $paged); 
while ($regular_posts->have_posts()): $regular_posts->the_post(); 
    the_title(); 
endwhile; 
echo get_next_posts_link('Older Entries', $regular_posts->max_num_pages); 

Mã này được chứa trong mẫu "home.php" của tôi, quản lý trang "Tin tức" mà tôi đã tạo trong trang tổng quan và đặt làm "Trang bài đăng" trong "Cài đặt đọc".

+0

Bạn đang cố gắng thực hiện điều này trên trang chủ tĩnh hoặc trang lưu trữ? (Có vẻ như một trang lưu trữ, nhưng tôi chỉ muốn xác nhận). Nó là một trang lưu trữ của nó, nếu nó cho bài viết hoặc bài viết tùy chỉnh? – FluffyKitten

+0

Xin lỗi tôi đã đề cập đến điều đó. Mã này thuộc về mẫu "home.php", quản lý trang "Tin tức" mà tôi đã tạo trong trang tổng quan và đặt làm "Trang bài đăng" trong "Cài đặt đọc". Đó là cho các bài viết thường xuyên của WP. – drake035

Trả lời

1

Trang chủ tĩnh hơi khác với lưu trữ, vì nó là thông số page thay vì paged.

Trang Codex Pagination bao gồm mã này cho trang chủ tĩnh, mà thực sự sẽ làm việc trong mọi trường hợp (tức là thậm chí các trang lưu trữ) vì kiểm tra nó cho cả hai thông số:

if (get_query_var('paged')) { $paged = get_query_var('paged'); } 
elseif (get_query_var('page')) { $paged = get_query_var('page'); } 
else { $paged = 1; } 

Nhưng nếu bạn chỉ cần nó để làm việc trên trang chủ, thay đổi mã của bạn cho biến paged $ đến những điều sau đây nên làm việc quá:

$paged = (get_query_var('page')) ? get_query_var('page') : 1; 
+0

Thực ra tôi nhận ra http: // localhost: 3000/my_project/news/page/2/cho "trang không tìm thấy", đó là lý do tại sao nó không hiển thị bất cứ thứ gì. http: // localhost: 3000/my_project/news/là trang bài đăng của tôi. Tôi vẫn nhận được "trang không tìm thấy" khi sử dụng mã của bạn, bất kỳ ý tưởng gì để thử tiếp theo? – drake035

+0

@ drake035 Bạn có đang sử dụng loại bài đăng tùy chỉnh với slug "tin tức" không? Nếu không, bạn có đang sử dụng trang & mẫu tùy chỉnh để hiển thị các bài đăng trong trang "tin tức" không? – FluffyKitten

+0

Có, tôi đang sử dụng trang WP có tên "Tin tức" (trang WP thường được tạo trong bảng điều khiển) và trang WP này được đặt là "Trang bài đăng" trong "Cài đặt đọc". – drake035

0

bạn có thể đặt mã này trong tập tin function.php,

function pagination($pages = '', $range = 4) { 
$showitems = ($range * 2) + 1; 

global $paged; 
if (empty($paged)) 
    $paged = 1; 

if ($pages == '') { 
    global $wp_query; 
    $pages = $wp_query->max_num_pages; 
    if (!$pages) { 
     $pages = 1; 
    } 
} 

if (1 != $pages) { 
    echo "<div class=\"fl-w-left main-pagination\">"; 
    if ($paged > 2 && $paged > $range + 1 && $showitems < $pages) 
     echo "<a href='" . get_pagenum_link(1) . "'>&laquo; First</a>"; 
    if ($paged > 1 && $showitems < $pages) 
     echo "<a href='" . get_pagenum_link($paged - 1) . "'>&lsaquo; Previous</a>"; 
    echo '<ul>'; 
    for ($i = 1; $i <= $pages; $i++) { 

     if (1 != $pages && (!($i >= $paged + $range + 1 || $i <= $paged - $range - 1) || $pages <= $showitems)) { 
      echo ($paged == $i) ? "<li class=\"active\">" . $i . "</li>" : "<a href='" . get_pagenum_link($i) . "'>" . $i . "</a>"; 
     } 
    } 
    echo '</ul>'; 

    if ($paged < $pages && $showitems < $pages) 
     echo "<a href=\"" . get_pagenum_link($paged + 1) . "\">Next &rsaquo;</a>"; 
    if ($paged < $pages - 1 && $paged + $range - 1 < $pages && $showitems < $pages) 
     echo "<a href='" . get_pagenum_link($pages) . "'>Last &raquo;</a>"; 
    echo "</div>\n"; 
}} 

Ngoài ra, đặt mã này trong trang của bạn hoặc tập tin bài mẫu,

<?php if (function_exists("pagination")) { ?> 
        <?php pagination($post_query->max_num_pages); ?> 
       <?php } 
       ?> 
+0

Lõi WordPress đã có trình trợ giúp phân trang 'paginate_links()' và khi trang 404 được trả về trang 2, trang hoặc tệp mẫu bài đăng sẽ không được thực hiện, '404.php' sẽ –

0

Thay đổi $wp_query->posts_per_page trong mẫu với một trường hợp mới của WP_Query không làm việc vì số trang bạn yêu cầu đã được xác nhận đối với $wp_query->max_num_pages bởi WordPress trước khi mẫu được thực hiện. Do trang được yêu cầu nhiều hơn giá trị này cho truy vấn chính, mẫu 404.php được phân phát thay thế và mã của bạn trong mẫu home.php thậm chí không được thực thi.

Bí quyết là lấy $wp_query->max_num_pages để khớp với số trang tối đa thực sự bằng cách thao tác truy vấn chính để sử dụng đối số tùy chỉnh của bạn, trước khi truy vấn chính được thực hiện. $wp_query->posts_per_page$wp_query->found_posts sau đó sẽ khớp với kết quả của bạn, dẫn đến một số $wp_query->max_num_pages cũng vậy.

Cách tốt nhất, theo ý kiến ​​của tôi, là chỉnh sửa các đối số truy vấn chính trước khi truy vấn chính nhận được các bài đăng của nó. Ví dụ, bạn có thể thêm dòng sau vào functions.php của theme của bạn:

function custom_main_query($query){ 
    if(is_admin()) return; 
    if(!$query->is_main_query()) return; 
    if(is_home()) $query->set('posts_per_page', 3); 
} 

add_action('pre_get_posts', 'custom_main_query'); 

này sau đó sẽ có nghĩa là một vòng lặp tiêu chuẩn sẽ làm việc ra các hộp quá:

// Standard loop 
while (have_posts()) : the_post(); 
    the_title(); 
endwhile; 

// Navigation links 
previous_posts_link('Newer Entries'); 
next_posts_link('Older Entries'); 

Nếu bạn chỉ thao tác số số bài đăng trên mỗi trang, có thể tốt hơn là thay đổi các bài đăng mặc định trên mỗi trang bằng cách truy cập Options => Reading trong quản trị viên WordPress và đặt Blog pages show at most thành 3 ở đây thay thế.

0

Lỗi này thường xảy ra do giới hạn được đặt trên số lượng bài đăng hiển thị trên mẫu của bạn. Có thể điều này được đặt thành ít hơn 4. Vì vậy, hãy truy cập trang tổng quan WordPress của bạn và điều hướng đến Settings->Reading.Tìm kiếm các trang Blog hiển thị tối đa và nếu giá trị nhỏ hơn 4, hãy tăng nó lên tổng số bài đăng để hiển thị trên mẫu của bạn, cộng với liên kết pagination (trong trường hợp của bạn, ít nhất là 4).

Các vấn đề liên quan