워드프레스 카테고리.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
'source' 카테고리의 다른 글
| Wordpress 기반 외부에 있는 URL로 다시 쓰기 (0) | 2023.02.07 |
|---|---|
| WordPress 링크 모두 이중 URL로 리디렉션 (0) | 2023.02.07 |
| 게시물을 클릭하면 WordPress의 데이터베이스에서 쿼리된 값이 전송되도록 하는 방법 (0) | 2023.02.07 |
| Wordpress 검색 결과를 표시하는 방법 (0) | 2023.02.07 |
| 문자열 출력에서 캐리지 리턴을 제거하려면 어떻게 해야 합니까? (0) | 2023.02.07 |