Warum wird die Seitennumerierung immer unterbrochen, wenn sie auf einer beliebigen Form einer Homepage verwendet wird?

Warum bricht die WP-Paginierung bei Verwendung auf der Startseite ab?

Wenn Sie den folgenden Code verwenden und ihn in einer Seitenvorlage verwenden, funktioniert er einwandfrei (stellen Sie sicher, dass Sie 3 oder mehr Beiträge haben). Sobald Sie jedoch den gleichen Code in home.php, front-page.php, index.php oder sogar als Seitenvorlage verwenden, aber als statische Homepage festgelegt sind, bricht er ab.

Die URL zeigt /page/2/ aber Sie erhalten eine 404-Seite. Wenn Sie die URL zu /?page=2 ändern, funktioniert es.

Ich habe so viele Fragen zu diesem Thema überall gesehen, aber keine hat eine Lösung, die funktioniert.

Der Einfachheit halber habe ich die Schleife unten vereinfacht und verwende die Standard-WP-Links für nächste und vorherige Posts. Ich möchte kein Plugin wie WP-PageNavi oder ähnliches verwenden.

   2, 'paged' => $paged )); ?> have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>       

Solutions Collecting From Web of "Warum wird die Seitennumerierung immer unterbrochen, wenn sie auf einer beliebigen Form einer Homepage verwendet wird?"

Die Lösung besteht darin, die Hauptabfrage in der Vorlage nicht zu ändern. Die Standardabfrage findet vor dem Laden der Vorlage statt, sodass die Abfrage in der Vorlage diese ursprüngliche Abfrage überschreibt, was eine Verschwendung von Ressourcen bedeutet. Sehen Sie sich das Beispiel im Codex unter pre_get_posts an, um die Standardabfrage ohne Paginierungsprobleme zu korrigieren.

Auch von codex.wordpress.com/Pagination (unter ” Erweiterte Fehlerbehebungsschritte “> ” Entfernen von query_posts aus der Hauptschleife “) bezüglich des pre_get_posts der Hauptabfrage über die von Milo erwähnte pre_get_posts Aktion:

[…] füge die Abfrage für deine Home- und Kategorieseiten zurück in die functions.php Datei deines Themes:

 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_home()){ $query->set('posts_per_page', 3); } if(is_category()){ $query->set('posts_per_page', 3); } } } add_action( 'pre_get_posts', 'my_post_queries' ); 

Ihre Implementierung könnte also in etwa wie folgt aussehen

 function modify_query( $query ) { if( !$query->is_main_query() ) return; //Only wish to modify the main query //Modify the query vars for the home and front pages if( is_home() || is_front_page() ) { $paged = get_query_var('page'); //If the 'page' query var isn't set, or didn't return an integer, default to 1 $paged = !isset( $paged ) || !is_int( $paged ) ? $paged : 1; $query->set( 'paged', $paged ); $query->set( 'posts_per_page', 2 ); } } add_action( 'pre_get_posts', 'modify_query' );