왜 페이지가 작동하지 않고 워드프레스 사이트에서 404 에러가 발생합니까?
좋은 하루!문제는 404 오류의 2페이지를 클릭하면 템플릿 카테고리(아카이브)에서 페이지가 작동하지 않는다는 것입니다.해결 방법을 이해하지 못하게 도와주세요. 이미 머리가 모두 부러졌습니다.
나의 루프:
<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$arg = array(
'cat' => get_queried_object_id(),
'post_type'=>'post',
'posts_per_page'=>9,
//'order'=>'desc',
'paged' => $paged,
);
$query = new WP_query($arg);
if($query->have_posts()) : ?>
<section class="blog">
<?php
echo '<div class="row">';
$i=0;
$formcreated=false;
while( $query->have_posts() ) :
$query->the_post();
// display post
endwhile;
wp_reset_postdata();
endif;
?>
<div class="pagination">
<?php
if (function_exists('custom_pagination')) {
custom_pagination($query->max_num_pages,"",$paged);
}
?>
<?php wp_reset_postdata(); ?>
</div>
그리고 나의 사용자 지정 페이지:
function my_post_queries( $query ) {
// do not alter the query on wp-admin pages and only alter it if it's the main query
if (!is_admin() && $query->is_main_query()){
// alter the query for the home and category pages
if(is_category()){
$query->set('posts_per_page', 1);
$query->set('post_type','product');
}
}
}
add_action( 'pre_get_posts', 'my_post_queries' );
function custom_pagination($numpages = '', $pagerange = '', $paged='') {
if (empty($pagerange)) {
$pagerange = 2;
}
/**
* This first part of our function is a fallback
* for custom pagination inside a regular loop that
* uses the global $paged and global $wp_query variables.
*
* It's good because we can now override default pagination
* in our theme, and use this function in default queries
* and custom queries.
*/
global $paged;
if (empty($paged)) {
$paged = 1;
}
if ($numpages == '') {
global $wp_query;
$numpages = $wp_query->max_num_pages;
if(!$numpages) {
$numpages = 1;
}
}
/**
* We construct the pagination arguments to enter into our paginate_links
* function.
*/
$pagination_args = array(
'base' => get_pagenum_link(1) . '%_%',
'format' => 'page/%#%',
'total' => $numpages,
'current' => $paged,
'show_all' => False,
'end_size' => 1,
'mid_size' => $pagerange,
'prev_next' => True,
'prev_text' => __('<'),
'next_text' => __('>'),
'type' => 'plain',
'add_args' => false,
'add_fragment' => ''
);
$paginate_links = paginate_links($pagination_args);
if ($paginate_links) {
echo "<nav class='custom-pagination'>";
echo $paginate_links;
echo "</nav>";
}
}
최근 두 개의 포럼에서 이 문제가 제기되었기 때문에, 저는 이에 대해 답변합니다.
사용 중인 페이지와 같은 사용자 지정 페이지를 사용하는 경우 http://callmenick.com/post/custom-wordpress-loop-with-pagination 에서 제공되는 것처럼 보이지만 부모 번호가 지정된 페이지가 사람들에게 해당하므로 Genesis 하위 테마에서도 발생합니다.
왜 404페이지를 받습니까?callmenick.com 및 Genesis( genesis_posts_nav)의 사용자 지정 페이지는 기본 쿼리를 위한 것이므로, 다른 쿼리에 대한 페이지가 읽기 설정의 페이지당 게시물 아래에 있는 경우(기본 쿼리에 대해 설정됨) 2페이지에 404가 표시됩니다.
WordPress 사이트의 모든 앞 페이지 요청은 메인 쿼리를 생성합니다.WordPress가 로드하기로 결정한 템플릿은 해당 기본 쿼리의 결과를 기반으로 합니다(Action Reference 페이지를 보면 WordPress가 이러한 작업을 수행하는 순서를 볼 수 있습니다).해당 쿼리의 결과를 출력하지 않더라도 실행 중이며, 페이지가 지정된 아카이브의 경우 해당 페이지를 다른 쿼리에 사용하려는 경우 이 문제가 발생합니다.— 마일로 https://wordpress.stackexchange.com/a/120963/64742
많은 사람들이 함수에서 다시 사용하는 대신 해당 루프에 대한 페이지를 구축하기 때문에 이 질문은 많이 볼 수 없습니다.php 파일 또는 부모 테마.이 내용은 여기에서 확인하실 수 있습니다: https://codex.wordpress.org/Function_Reference/paginate_links
맨 위부터 시작해서 코딩할 때마다 wp-config.php에서 디버그를 켭니다.
내 cpt 아카이브의 기본 사용자 지정 루프.
아카이브 제품php
<?php $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$product_args = array(
'post_type' => 'product',
'posts_per_page' => 2, //the same as the parse_query filter in our functions.php file
'paged' => $paged,
'page' => $paged
);
$product_query = new WP_Query( $product_args ); ?>
<?php if ( $product_query->have_posts() ) : ?>
<!-- the loop -->
<?php while ( $product_query->have_posts() ) : $product_query->the_post(); ?>
<article class="loop">
<h3><?php the_title(); ?></h3>
<div class="content">
<?php the_excerpt(); ?>
</div>
</article>
<?php endwhile; ?>
<!-- end of the loop -->
<!-- pagination here -->
<?php
if (function_exists( 'custom_pagination' )) :
custom_pagination( $product_query->max_num_pages,"",$paged );
endif;
?>
<?php wp_reset_postdata(); ?>
<?php else: ?>
<p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>
당신의 기능대로.php 파일:
조건에 대해 알아봅니다.https://codex.wordpress.org/Conditional_Tags https://codex.wordpress.org/Function_Reference/is_post_type_archive
/**
* Posts per page for CPT archive
* prevent 404 if posts per page on main query
* is greater than the posts per page for product cpt archive
*
* thanks to https://sridharkatakam.com/ for improved solution!
*/
function prefix_change_cpt_archive_per_page( $query ) {
//* for cpt or any post type main archive
if ( $query->is_main_query() && ! is_admin() && is_post_type_archive( 'product' ) ) {
$query->set( 'posts_per_page', '2' );
}
}
add_action( 'pre_get_posts', 'prefix_change_cpt_archive_per_page' );
/**
*
* Posts per page for category (test-category) under CPT archive
*
*/
function prefix_change_category_cpt_posts_per_page( $query ) {
if ( $query->is_main_query() && ! is_admin() && is_category( 'test-category' ) ) {
$query->set( 'post_type', array( 'product' ) );
$query->set( 'posts_per_page', '2' );
}
}
add_action( 'pre_get_posts', 'prefix_change_category_cpt_posts_per_page' );
/**
*
* custom numbered pagination
* @http://callmenick.com/post/custom-wordpress-loop-with-pagination
*
*/
function custom_pagination( $numpages = '', $pagerange = '', $paged='' ) {
if (empty($pagerange)) {
$pagerange = 2;
}
/**
* This first part of our function is a fallback
* for custom pagination inside a regular loop that
* uses the global $paged and global $wp_query variables.
*
* It's good because we can now override default pagination
* in our theme, and use this function in default queries
* and custom queries.
*/
global $paged;
if (empty($paged)) {
$paged = 1;
}
if ($numpages == '') {
global $wp_query;
$numpages = $wp_query->max_num_pages;
if(!$numpages) {
$numpages = 1;
}
}
/**
* We construct the pagination arguments to enter into our paginate_links
* function.
*/
$pagination_args = array(
'base' => get_pagenum_link(1) . '%_%',
'format' => 'page/%#%',
'total' => $numpages,
'current' => $paged,
'show_all' => False,
'end_size' => 1,
'mid_size' => $pagerange,
'prev_next' => True,
'prev_text' => __('«'),
'next_text' => __('»'),
'type' => 'plain',
'add_args' => false,
'add_fragment' => ''
);
$paginate_links = paginate_links($pagination_args);
if ($paginate_links) {
echo "<nav class='custom-pagination'>";
echo "<span class='page-numbers page-num'>Page " . $paged . " of " . $numpages . "</span> ";
echo $paginate_links;
echo "</nav>";
}
}
wp- include/functions 상에서php
그 행을 더합니다.
function my_pagination_rewrite() {
add_rewrite_rule('([a-z]+)/page/?([0-9]{1,})/?$', 'index.php?category_name=$matches[1]&paged=$matches[2]', 'top');
}
add_action('init', 'my_pagination_rewrite');
저는 제 사이트 https://chronodivers.com 에서 같은 문제가 있었습니다. 저는 3개의 유사한 사이트가 모두 동일한 테마, 플러그인, WP 버전(5.6) 등을 실행하고 있습니다.이 사이트만 문제가 있었습니다.
모든 사이트에서 PERMALINK 형식 /%category%/%postname%/을(를) 사용합니다.
플러그인(https://wordpress.org/support/view/plugin-reviews/category-pagination-fix) 을 사용해 보았습니다.
그런 다음 간단한 프론트 엔드 작업을 수행했습니다.
Permalink 형식을 PLANE으로 변경하여 저장했습니다.
플러시된 캐시
Permalink 형식을 /%category%/%postname%/로 다시 변경하고 플러시된 CASH 40개를 저장했습니다.
YOAST 플러그인에서 퍼머링크 구조 변경으로 인해 인덱스 데이터베이스를 다시 만들어야 할 수도 있다는 "경고" 팝업이 떴고 WP CLI를 언급했습니다.
YOAST > TOOLS > Optimize SEO Data로 이동만 했습니다.
5가 완료된 후 캐시 삭제
효과가 있습니다. 모든 카테고리를 확인해보니 모두 효과가 있습니다.
이번에는 PHP 파일, htaccess 등을 변경하지 않습니다.
언급URL : https://stackoverflow.com/questions/42189247/why-pagination-is-not-working-and-gives-a-404-error-on-the-wordpress-site
'source' 카테고리의 다른 글
여러 특성에 걸쳐 트랙 바이 트랙이 있는 ng-repeat (0) | 2023.10.19 |
---|---|
jQuery를 사용하여 메타 태그를 읽을 수 있습니까? (0) | 2023.10.19 |
객체의 속성 중에서 min/max 값을 얻는 빠른 방법 (0) | 2023.10.19 |
두 디브의 스크롤 위치를 동기화하려면 어떻게 해야 합니까? (0) | 2023.10.19 |
Powershell 3에서 속성 이름 별칭 지정 (0) | 2023.10.14 |