programing

WordPress에서 페이지 기능이 작동하지 않습니다.

minimums 2023. 10. 25. 23:11
반응형

WordPress에서 페이지 기능이 작동하지 않습니다.

코덱스의 예를 정확히 따르더라도 페이지를 클릭할 때 도착하는 페이지next링크( http://localhost:3000/my_project/news/page/2/)가 없습니다("페이지를 찾을 수 없습니다").

왜요?

$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);

이 코드는 내 "home.php" 템플릿에 포함되어 있으며 대시보드에서 만든 "뉴스" 페이지를 관리하고 "읽기 설정"에서 "게시물 페이지"로 설정합니다.

정적 홈페이지는 아카이브와는 약간 다릅니다.page매개 변수 대신paged.

Codex Pagination 페이지에는 정적 홈페이지에 대한 이 코드가 포함되어 있으며, 이 코드는 두 매개 변수를 모두 확인하기 때문에 모든 경우(예: 아카이브 페이지)에 실제로 작동합니다.

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

그러나 홈페이지에서 작동하는 데만 필요한 경우 $paged 변수의 코드를 다음과 같이 변경해야 합니다.

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

이 코드를 작동시키면 됩니다.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";
}}

또한, 이 코드를 당신의 페이지나 포스트 템플릿 파일에 넣으십시오.

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

변화하는$wp_query->posts_per_page새로운 예를 가진 템플릿에서WP_Query요청된 페이지 번호가 이미 다음에 대해 유효성 검사되었기 때문에 작동하지 않습니다.$wp_query->max_num_pages템플릿이 실행되기 전에 WordPress를 사용합니다.요청된 페이지가 메인 쿼리에 대한 이 값보다 많으므로,404.php템플릿은 대신 제공되며, 당신의 코드는home.php템플릿이 실행되지도 않습니다.

방법은 다음과 같습니다.$wp_query->max_num_pages기본 쿼리를 수행하기 전에 사용자 정의 인수를 사용하도록 기본 쿼리를 조작하여 실제 최대 페이지 수와 일치시킵니다.$wp_query->posts_per_page그리고.$wp_query->found_posts그러면 결과와 일치할 것이고, 결과는$wp_query->max_num_pages그것도 마찬가지입니다.

가장 좋은 방법은 메인 쿼리가 게시물을 받기 전에 메인 쿼리 인수를 편집하는 것입니다.예를 들어 테마의 기능에 다음을 추가할 수 있습니다.php:

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');

그러면 표준 루프가 상자도 해결됩니다.

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

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

페이지당 게시물 수만 조작하는 경우 다음으로 이동하여 페이지당 기본 게시물을 변경하는 것이 더 나을 수 있습니다.Options => ReadingWordPress 관리 및 설정에서Blog pages show at most대신 3명에게.

이 오류는 일반적으로 템플릿에 표시할 게시물의 수에 제한이 설정되어 있기 때문에 발생합니다.이것은 4 이하로 설정되어 있을 수도 있습니다.워드프레스 대시보드로 이동하여 다음으로 이동합니다.Settings->Reading. 블로그 페이지가 최대 4개 미만일 경우 템플릿에 표시할 총 게시물 수와 페이지 링크(사용자의 경우 최소 4개)로 늘립니다.

언급URL : https://stackoverflow.com/questions/46469514/pagination-function-doesnt-work-in-wordpress

반응형