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) . "'>« First</a>";
if ($paged > 1 && $showitems < $pages)
echo "<a href='" . get_pagenum_link($paged - 1) . "'>‹ 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 ›</a>";
if ($paged < $pages - 1 && $paged + $range - 1 < $pages && $showitems < $pages)
echo "<a href='" . get_pagenum_link($pages) . "'>Last »</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 => Reading
WordPress 관리 및 설정에서Blog pages show at most
대신 3명에게.
이 오류는 일반적으로 템플릿에 표시할 게시물의 수에 제한이 설정되어 있기 때문에 발생합니다.이것은 4 이하로 설정되어 있을 수도 있습니다.워드프레스 대시보드로 이동하여 다음으로 이동합니다.Settings->Reading
. 블로그 페이지가 최대 4개 미만일 경우 템플릿에 표시할 총 게시물 수와 페이지 링크(사용자의 경우 최소 4개)로 늘립니다.
언급URL : https://stackoverflow.com/questions/46469514/pagination-function-doesnt-work-in-wordpress
'programing' 카테고리의 다른 글
테이블 셀의 텍스트 랩핑 방지 방법 (0) | 2023.10.25 |
---|---|
Google Apps Script에서 MySQL SP가 호출되면 갑자기 중단됨 (0) | 2023.10.25 |
워드프레스 포스트에 책갈피 추가하기 (0) | 2023.10.25 |
handle delete가 있는 java jdbi3 DB 업데이트 안 함 (0) | 2023.10.20 |
HTML 양식을 리디렉션 없이 제출하는 방법 (0) | 2023.10.20 |