Paginierung auf der Kategorieseite mit benutzerdefinierten Post-Typen

WordPress ist nicht neu für mich, aber ich bin wirklich auf diesem Stück Code fest, dass ich nicht richtig funktionieren kann.

Ich registriere einen benutzerdefinierten Beitragstyp Nachrichten und lasse den benutzerdefinierten Beitragstyp die WordPress-Kategorien verwenden

'taxonomies' => array('category') 

So weit, ist es gut. Ich kann dem benutzerdefinierten Nachrichtentyp Nachrichten verschiedene Kategorien zuweisen. Aber ich möchte, dass Leute Nachrichten aus einer bestimmten Kategorie sehen können. Das möchte ich mit der category.php Seite. Das Problem ist, dass die Seitennummerierung nicht funktioniert. Ich bekomme eine Seite nicht gefunden, wenn ich zu / Seite / 2 gehe

Ich verwende diesen Code auf einer category.php-Seite.

 // Get post ID $post_type = get_post_type( $post->ID ); // Get category ID $category_id = get_cat_ID(single_cat_title('', false)); // WordPress pagination $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; // WP_Query arguments $args_news = array ( 'post_type' => array( 'news' ), 'pagination' => true, 'posts_per_page' => '9', 'orderby' => 'date', 'paged' => $paged, 'cat' => $category_id, ); // The Query $query = new WP_Query( $args_news ); // The Loop if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); ?> 

<?php // Reset postdata wp_reset_postdata();

Solutions Collecting From Web of "Paginierung auf der Kategorieseite mit benutzerdefinierten Post-Typen"

Bevor ich auf Ihr Problem eingehe, möchte ich mit der Frage beginnen, warum Sie eine benutzerdefinierte Abfrage auf einer Kategorieseite anstelle der Hauptabfrage verwenden. Sie sollten die Hauptabfrage für eine benutzerdefinierte Abfrage auf keiner Archivseite oder auf Ihrer Homepage ändern.

WordPress bietet einen Aktions-Hook, pre_get_posts den Sie in Verbindung mit bedingten Tags verwenden können , um die Hauptabfrage zu targetieren und zu ändern, bevor sie auf bestimmten Seiten ausgeführt wird. Für Kategorieseiten wird die bedingte Prüfung is_category() bereitgestellt.

Sie können einfach folgendes in Ihrer functions.php tun, während Sie Ihre Standardschleife auf Ihrer Kategorieseite beibehalten. Nur ein Tipp, pre_get_posts verwendet die gleichen Parameter wie WP_Query

 function add_news_to_category( $query ) { if ( !is_admin && $query->is_category() && $query->is_main_query() ) { $query->set( 'post_type', array( 'news' ) ); $query->set( 'posts_per_page', '9' ); $query->set( 'orderby', 'date' ); } } add_action( 'pre_get_posts', 'add_news_to_category' ); 

OK, jetzt zu deinem eigentlichen Problem mit deinem Code.

  • Erstens müssen Sie wp_reset_query und wp_reset_postdata zusammen verwenden. wp_reset_query wird tatsächlich in Verbindung mit query_posts , die Sie nie verwenden dürfen, und ich meine nie. Verwenden wp_reset_postdata after einfach wp_reset_postdata after WP_Query and get_posts` und denken Sie daran, nie vergessen, dies zu tun

  • Zweitens, schauen Sie sich Ihren Code genauer an. Sie haben $query = new WP_Query( $args_news ); , aber dann hast du < ?php next_posts_link( 'Older Posts', $custom_query->max_num_pages ); ?> < ?php next_posts_link( 'Older Posts', $custom_query->max_num_pages ); ?> . Finde den Unterschied? $query und $custom_query . Also, < ?php next_posts_link( 'Older Posts', $custom_query->max_num_pages ); ?> < ?php next_posts_link( 'Older Posts', $custom_query->max_num_pages ); ?> sollte < ?php next_posts_link( 'Older Posts', $query->max_num_pages ); ?> < ?php next_posts_link( 'Older Posts', $query->max_num_pages ); ?>

Für weitere Informationen:

  • Wann eine benutzerdefinierte Abfrage verwendet werden soll und wann die Hauptabfrage verwendet werden soll