source

워드프레스 카테고리.php 페이지 번호 404 오류

itover 2023. 2. 7. 19:45
반응형

워드프레스 카테고리.php 페이지 번호 404 오류

페이지 수가 지정된 카테고리.php 파일의 카테고리에 대한 투고를 표시하려고 하는데 "오래된 투고" 버튼을 클릭하면 404가 표시됩니다.현재 쿼리에 사용하고 있는 코드는 다음과 같습니다.

<?php

    // Get ID of category we're currently looking at
    $cat = get_cat_id( single_cat_title("",false) );

    query_posts(array(
        'posts_per_page'=>25,
        'cat' => $cat,
        'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 )
    ));
    if(have_posts()):
?>

사용하고 있는 permalink 구조는 /%category%/%postname%/입니다.

posts_per_page가 디폴트보다 작게 설정되어 있으면 404 에러가 발생하는 버그가 있다고 읽었습니다만, 문제는 아닌 것 같습니다.내 설정의 기본값은 20입니다.

좋은 생각 있어요?permalink 설정에 문제가 있나요?/category-name/page/2는 /blog-page/page/2와 동일하게 동작해야 하지 않습니까?

카테고리를 /category/cat-name 또는 /blog-page/category/cat-name과 같이 액세스하려고 해도 404가 표시됩니다.

감사합니다!

이것은 제가 경험한 것과 매우 비슷합니다(자녀 테마에서는 category.php에서 페이지네이션 사용 시 커스텀 퍼멀링크 %category%%postname%가 404가 됩니다(2페이지만).

이 솔루션은 매우 효과가 있었습니다.http://www.bamboosolutions.co.uk/fix-404-errors-wordpress-pagination/

해결책을 요약하자면, 우리 아이에서functions.php파일 이 코드를 추가했습니다.

function custom_pre_get_posts( $query ) {  
if( $query->is_main_query() && !$query->is_feed() && !is_admin() && is_category()) {  
    $query->set( 'paged', str_replace( '/', '', get_query_var( 'page' ) ) );  }  } 

add_action('pre_get_posts','custom_pre_get_posts'); 

function custom_request($query_string ) { 
     if( isset( $query_string['page'] ) ) { 
         if( ''!=$query_string['page'] ) { 
             if( isset( $query_string['name'] ) ) { unset( $query_string['name'] ); } } } return $query_string; } 

add_filter('request', 'custom_request');

나는 이 오류에 대한 다양한 원인과 해결책을 읽는 데 많은 시간을 소비했는데, 내 경우 WP가 올바른 커스텀 카테고리를 요청하지 않았기 때문입니다.이 수정으로 내 시간이 많이 절약됐어!

저도 같은 문제가 있었고 로렌의 치료법이 도움이 되었어요.문제는 이 코드가 현재 페이지가 바뀌지 않고 1페이지에 걸렸다는 것입니다.

기능 중.php i는 다음 코드를 추가하였습니다.

function custom_pre_get_posts($query)
{
    if ($query->is_main_query() && !$query->is_feed() && !is_admin() && is_category()) {
        $query->set('page_val', get_query_var('paged'));
        $query->set('paged', 0);
    }
}

add_action('pre_get_posts', 'custom_pre_get_posts');

카테고리 템플릿(category.template)에서는 다음 코드를 사용했습니다.

  $paged = (get_query_var('page_val') ? get_query_var('page_val') : 1);
  $query = new WP_Query(array(
    'posts_per_page' => 3,
    'cat' => $cat,
    'orderby' => 'date',
    'paged' => $paged,
    'order' => 'DESC'));

페이지 접속을 위해 나는 이 코드를 이렇게 변경했다.제 솔루션이 도움이 되기를 바랍니다.

$big = 999999999;  
echo paginate_links(array(
                        'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
                        'format' => '/page/%#%',
                        'current' => max(1, $paged),
                        'prev_text' => __('Previous Page'),
                        'next_text' => __('Next Page'),
                        'show_all' => true,
                        'total' => $query->max_num_pages
                    ));

우선 WP_Query로 전환해 보겠습니다.Pagination으로 버그가 적어집니다.

https://codex.wordpress.org/Function_Reference/query_posts

query_param()은 페이지의 메인 쿼리를 쿼리의 새 인스턴스로 대체하여 수정하는 지나치게 단순하고 문제가 있는 방법입니다.비효율적이며(SQL 쿼리를 재실행), 상황에 따라서는 완전히 실패합니다(특히 투고 페이지 수를 처리할 때).

$cat = get_cat_id( single_cat_title("",false) );
$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
$the_query = new  WP_Query
 (
          array
          (
              'posts_per_page'=>25,
              'cat' => $cat,
              'paged' => $paged
          ),
);
if ($the_query->have_posts()) : ?>

그래도 문제가 해결되지 않으면 Post ID로 permalink 구조를 변경하여 변경 여부를 확인합니다.어느 쪽도 동작하지 않는 경우는, $cat 를 기존의 카테고리(및 26 개의 투고가 있는 것)로 설정하고, 그것이 문제의 원인이 되지 않는 것을 확인합니다.

이게 도움이 됐으면 좋겠다.

언급URL : https://stackoverflow.com/questions/30108550/wordpress-category-php-pagination-404-errors

반응형