Wordpress category.php分頁404錯誤

[英]Wordpress category.php Pagination 404 Errors

I'm trying to display posts for categories in my category.php file with pagination, but when I click the "older posts" button, I'm getting a 404. Here's the code I'm currently using for the query:



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

        'cat' => $cat,
        'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 )

The permalink structure I'm using is /%category%/%postname%/


I've read that there is a bug that will leave you with a 404 error if the "posts_per_page" is set to less than the default, but that doesn't seem to be the issue. The default in my settings is 20.


Any ideas? Is this an issue with the permalink settings? Shouldn't having /category-name/page/2 work the same way as /blog-page/page/2 works?

有任何想法嗎?這是永久鏈接設置的問題嗎?不應該/ category-name / page / 2的工作方式與/ blog-page / page / 2相同嗎?

I also get a 404 if I try to access categories like this: /category/cat-name, or /blog-page/category/cat-name

如果我嘗試訪問這樣的類別,我也會得到404:/ category / cat-name,或/ blog-page / category / cat-name


3 个解决方案


This sounds very similar to what I experienced (In my child theme, custom permalink %category%%postname% resulted in a 404 when using pagination in category.php, only on page 2 though).

這聽起來與我的經歷非常相似(在我的孩子主題中,自定義永久鏈接%category %% postname%在category.php中使用分頁時產生404,但僅在第2頁上)。

I found this solution worked really well: http://www.bamboosolutions.co.uk/fix-404-errors-wordpress-pagination/


To summarize the solution, in my child functions.php file I added this bit of code:


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


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

I spent so much time reading about different causes and solutions for this error, in my case it was that WP was not requesting the correct custom category. This fix saved me!



I had the same issue, and Lauren's fix helped me. My problem was that with this code the current page didn't change, it got stuck on page 1.


In functions.php i added the following code:


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

and in category template (category.php) i used this code:


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

for pagination i changed this code like this. Hope my solution helps:


$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


I would try switching to WP_Query first, it's less buggy with Pagination.



query_posts() is overly simplistic and problematic way to modify main query of a page by replacing it with new instance of the query. It is inefficient (re-runs SQL queries) and will outright fail in some circumstances (especially often when dealing with posts pagination).


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

If that doesn't work, try changing your permalink structure to Post ID and see if that changes it. If neither of those work, set $cat to a category you know exists (and has 26 posts) and make sure that's not causing the problem.

如果這不起作用,請嘗試將永久鏈接結構更改為Post ID,並查看是否更改了它。如果這些都不起作用,請將$ cat設置為您知道的類別(並且有26個帖子),並確保不會導致問題。

Hope this helps.




  © 2014-2022 ITdaan.com