WordPress category.php Paginierung 404 Fehler

Lesezeit: 5 Minuten

Ich versuche, Beiträge für Kategorien in meiner Datei category.php mit Paginierung anzuzeigen, aber wenn ich auf die Schaltfläche „Ältere Beiträge“ klicke, erhalte ich eine 404. Hier ist der Code, den ich derzeit für die Abfrage verwende:

<?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()):
?>

Die von mir verwendete Permalink-Struktur ist /%category%/%postname%/

Ich habe gelesen, dass es einen Fehler gibt, der Sie mit einem 404-Fehler zurücklässt, wenn “posts_per_page” auf weniger als den Standardwert eingestellt ist, aber das scheint nicht das Problem zu sein. Der Standardwert in meinen Einstellungen ist 20.

Irgendwelche Ideen? Liegt das an den Permalink-Einstellungen? Sollte /category-name/page/2 nicht genauso funktionieren wie /blog-page/page/2?

Ich erhalte auch einen 404-Fehler, wenn ich versuche, auf Kategorien wie diese zuzugreifen: /category/cat-name oder /blog-page/category/cat-name

Vielen Dank!

Laurens Benutzeravatar
Lauren

Das klingt sehr ähnlich zu dem, was ich erlebt habe (In meinem untergeordneten Thema führte der benutzerdefinierte Permalink %category%%postname% zu einem 404, wenn die Paginierung in category.php verwendet wurde, allerdings nur auf Seite 2).

Ich fand diese Lösung wirklich gut funktioniert: http://www.bamboosolutions.co.uk/fix-404-errors-wordpress-pagination/

Um die Lösung zusammenzufassen, in meinem Kind functions.php Datei habe ich diesen Code hinzugefügt:

function custom_pre_get_posts( $query ) {  
if( $query->is_main_query() && !$query->is_feed() && !is_admin() && is_category()) {  
    $query->set( 'paged', str_replace( "https://stackoverflow.com/", '', 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');

Ich habe so viel Zeit damit verbracht, über verschiedene Ursachen und Lösungen für diesen Fehler zu lesen, in meinem Fall war es, dass WP nicht die richtige benutzerdefinierte Kategorie angefordert hat. Dieser Fix hat mir viel Zeit gespart!

  • Nachdem ich es geschafft hatte, die Paginierung für die Kategorie in Gang zu bringen, kam dieses Problem auf. Mit Ihrer Antwort funktioniert alles einwandfrei, danke!

    – Lowtech-Sonne

    9. Dezember 2016 um 11:21 Uhr

  • Das hat für 404 funktioniert. Jetzt zeigt www.domain.com/taxonomy/page/2 nicht 404, ABER es lädt jedes Mal nur den Inhalt der ersten Seite.

    – Omar

    21. März 2017 um 21:04 Uhr

  • Jawohl! danke … das Skript kombiniert mit dem query_posts in der ursprünglichen Antwort hat bei mir funktioniert

    – Omar

    21. März 2017 um 21:13 Uhr

  • Es gibt ein Plugin, das dies implementiert: wordpress.org/plugins/category-pagination-fix

    – Nukion

    8. Februar 2018 um 14:53 Uhr

  • Vielen Dank!! (Ein Tippfehler: ändern is_category() zu && is_category().) Dem Himmel sei Dank für StackOverflow! Ich dachte, ich würde Stunden damit verbringen, dies zu beheben.

    – Greg Perham

    15. August 2018 um 1:17 Uhr

Ich hatte das gleiche Problem und Laurens Lösung hat mir geholfen. Mein Problem war, dass sich mit diesem Code die aktuelle Seite nicht geändert hat, sie blieb auf Seite 1 hängen.

In der functions.php habe ich folgenden Code hinzugefügt:

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

und in der Kategorievorlage (category.php) habe ich diesen Code verwendet:

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

für die Paginierung habe ich diesen Code so geändert. Hoffe meine Lösung hilft:

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

  • Dies löst auch 404-Probleme. Danke, dass du das gepostet hast. Ich hatte ein Problem, bei dem /category/news/page/2 404 anzeigte. Diese Lösung hat es behoben.

    – HADI

    4. November 2018 um 17:40 Uhr

Benutzeravatar von Andrew Herder
Andreas Herder

Ich würde zuerst versuchen, zu WP_Query zu wechseln, es ist weniger fehlerhaft mit Pagination.

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

query_posts() ist eine zu einfache und problematische Möglichkeit, die Hauptabfrage einer Seite zu ändern, indem sie durch eine neue Instanz der Abfrage ersetzt wird. Es ist ineffizient (führt SQL-Abfragen erneut aus) und schlägt unter bestimmten Umständen völlig fehl (besonders häufig, wenn es um die Paginierung von Beiträgen geht).

$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()) : ?>

Wenn das nicht funktioniert, versuchen Sie, Ihre Permalink-Struktur in Post-ID zu ändern, und sehen Sie, ob sich das ändert. Wenn beides nicht funktioniert, setzen Sie $cat auf eine Kategorie, von der Sie wissen, dass sie existiert (und 26 Posts hat), und stellen Sie sicher, dass das Problem nicht dadurch verursacht wird.

Hoffe das hilft.

  • Das funktioniert, wenn ich die Permalink-Struktur aus ändere /%category%/%postname% zu /%category%/%post_id%. Aber das ist nicht wirklich eine praktikable Option. Ich brauche den Beitragstitel in den URLs für SEO-Zwecke.

    – Nick

    11. Mai 2015 um 17:36 Uhr

  • Es funktioniert, wenn ich einen Link von ändere /%category%/page/2/ zu /category/%category%/page/2/. Die WordPress-Funktionen, die Links zu älteren/neueren Beiträgen hinzufügen, haben dies jedoch nicht in ihren URLs.

    – Nick

    11. Mai 2015 um 18:05 Uhr

  • Sie könnten dies versuchen wordpress.org/support/view/plugin-reviews/… Es wurde seit 2 Jahren nicht aktualisiert, aber es gibt einen Überprüfungsbeitrag vom letzten Monat, der besagt, dass es immer noch funktioniert. (Es sind nur zwei kleine Funktionen.) Hoffentlich kann dies Ihnen helfen, das Problem zu lösen.

    – Andreas Herder

    12. Mai 2015 um 21:14 Uhr


  • Vielen Dank! Das hat teilweise funktioniert. Ich musste ein paar Dinge im Plugin ändern, damit es funktioniert. Der Code ist hier für alle, die ihn brauchen könnten: creative.link/code/wordpress-category-pagination-fix

    – Nick

    13. Mai 2015 um 19:47 Uhr


1388940cookie-checkWordPress category.php Paginierung 404 Fehler

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy