Seitenumbruchprobleme mit mehreren benutzerdefinierten Post-Archivseiten

Ich bin jetzt am Ende meiner Kräfte. Brauche wirklich Hilfe! Hier ist das Setup …

Ich habe 2 benutzerdefinierte Post-Typen in meiner functions.php:

// Register the events post type function events() { $labels = array( 'name' => _x('Evenemang', ''), 'singular_name' => _x('Evenemang', ''), 'menu_name' => _x('Evenemang', ''), 'name_admin_bar' => _x('Evenemang', ''), 'add_new' => _x('Skapa ny', 'evenemang'), 'add_new_item' => __('Skapa nyt evenemang'), 'search_items' => __('Sök evenemang'), 'not_found' => __('Hittade inga evenemang.'), 'not_found_in_trash' => __('Inga evenemang hittades i papperskorgen.'), ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_in_menu' => true, 'has_archive' => true, 'rewrite' => array('slug' => 'evenemang'), 'query_var' => 'evenemang', 'menu_icon' => 'dashicons-calendar-alt', 'supports' => array('title', 'editor', 'thumbnail') ); register_post_type('evenemang', $args); } add_action('init', 'events'); // Register the recipes post type function recipes() { $labels = array( 'name' => _x('Recept', ''), 'singular_name' => _x('Recept', ''), 'menu_name' => _x('Recept', ''), 'name_admin_bar' => _x('Recept', ''), 'add_new' => _x('Skapa ny', 'recept'), 'add_new_item' => __('Skapa ny recept'), 'search_items' => __('Sök recept'), 'not_found' => __('Hittade inga recept.'), 'not_found_in_trash' => __('Inga recept hittades i papperskorgen.'), ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_in_menu' => true, 'has_archive' => true, 'rewrite' => array('slug' => 'recept'), 'query_var' => 'recept', 'menu_icon' => 'dashicons-carrot', 'supports' => array('title', 'thumbnail') ); register_post_type('recept', $args); } add_action('init', 'recipes'); 

Für jede dieser 2 habe ich ein Archiv- {post_type} .php , und ich verwende um die Paginierungslinks auszuspucken, hier Archiv-evenemang.php:

  
8, 'post_type' => 'evenemang', 'meta_key' => 'event_date', 'orderby' => 'meta_value_num', 'order' => 'ASC', 'paged' => $paged, 'meta_query' => array( array( 'key' => 'event_date', 'compare' => '>=', 'value' => $today ) ) ); ?>

und hier ist Archiv-recept.php:

  
8, 'post_type' => 'recept', 'orderby' => 'title', 'order' => 'ASC', 'paged' => $paged ); ?>

Wie Sie sehen können, sind sie in functions.php genau so eingerichtet und verwenden die im Grunde genommen gleiche Archivvorlage (mit einer geringfügigen Anpassung an die $ Argumente in der Abfrage).

Die Seite ” evenemang ” funktioniert einwandfrei, sie zeigt die Ergebnisse, die Seitentasten und ich kann auf mydomain.com/evenemang/page/2/ zugreifen.

Die ” recept ” Seite funktioniert auch, es zeigt die Ergebnisse, aber keine Seitenumbruch-Buttons und wenn ich versuche und auf mydomain.com/recept/page/2/ zuzugreifen, geht es einfach auf die Titelseite.

Warum funktioniert es für einen und nicht für den anderen? Muss ich einige Argumente in der function paginate_links() ändern? Ein Problem mit get_query_var('paged') in mehreren Archiven? Ist es ein .htaccess-Problem?

Solutions Collecting From Web of "Seitenumbruchprobleme mit mehreren benutzerdefinierten Post-Archivseiten"

Ihr Problem kommt von einem grundlegenden Missverständnis, wie WordPress die Hauptschleife lädt.

Hier haben Sie eine Hauptabfrage, die die Posts in Ihrem Post-Typ-Archiv anzeigt. Es entscheidet dann, archive-recept.php basierend auf dieser Abfrage zu laden.

Der Aufruf von paginate_links liefert dann die Seitennummerierung für diese Hauptabfrage. Die Hauptabfrage wird jedoch nicht verwendet.

Stattdessen ignorieren Sie die Hauptabfrage, rufen Ihre eigene Abfrage auf (Verdoppelung der DB-Arbeit) und erwarten dann, dass die Paginierungslinks Ihnen die get_posts für Ihre get_posts Abfrage und nicht die Hauptabfrage geben.

Dies entspricht funktionell dem Aufruf von query_posts , was bekanntermaßen eine schlechte Praxis ist.

Verwenden pre_get_posts stattdessen den pre_get_posts Filter, um die Hauptabfrage zu ändern, bevor sie stattfindet, z. B. ähnlich wie:

 function wpse182971( $query ) { if ( $query-> is_post_type_archive && $query->is_main_query() ) { $query->set( 'posts_per_page', '8' ); } } add_action( 'pre_get_posts', 'wpse182971' );