wake-up-neo.net

Die Paginierung funktioniert nicht mit der benutzerdefinierten Kategorieschablone

Um meine Kenntnisse in WordPress zu vertiefen, habe ich ein Theme von Grund auf neu entwickelt und die Plugins ACF und CPT UI verwendet, um eine einfache und intuitive Backoffice-Oberfläche zu erstellen.

Mein Problem ist allerdings am Frontend. Ich habe eine Paginierung für die Homepage erstellt (mithilfe einer benutzerdefinierten Abfrage) und sie funktioniert einwandfrei. Dies ist bei Kategorieseiten (in einer Vorlage mit dem Namen category.php) nicht der Fall.

Ich habe stundenlang gegoogelt, um eine Lösung zu finden, aber alles scheint mit Permalinks zu tun zu haben, wenn ich keine Probleme mit Permalinks habe (ich verwende die Standardstruktur /% postname% /).

Hier ist der Code für meine Kategorieseite, einschließlich der benutzerdefinierten Schleife und der Paginierung:

<?php
$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
$my_videos = new WP_Query(array(
   'post_type' => 'video', 
   'category_name' => single_cat_title('', false), 
   'posts_per_page' => 6
)); 
 if ( $my_videos->have_posts() ) :  
  while ($my_videos->have_posts()) : $my_videos->the_post();
   show_video_thumbnails();
  endwhile; 
else:  ?>
<p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>

<!-- pagination here -->
<?php   next_posts_link( 'Older Entries', $my_videos->max_num_pages );
        previous_posts_link( 'Newer Entries' );
        wp_reset_postdata(); 
?>

Auf der ersten Seite der Kategorie funktioniert alles prima: Die Paginierung ist verfügbar und zeigt "Ältere Einträge".

Wenn ich auf den Link klicke, werde ich zu/category/mycategoryname/page/2 umgeleitet (mycategoryname ist mein Kategoriename), aber es wird ein 404-Fehler angezeigt.

Jede Hilfe wäre sehr dankbar. Ich habe das Gefühl, hier fehlt mir etwas.

3
Tayax

Da dies Ihre Hauptschleife in Ihrer Vorlage ist, sollten Sie keine neue Schleife erstellen, sondern die vorhandene Schleife mit pre_get_posts ändern. Auf diese Weise können Sie sicher sein, dass alle zusätzlichen Abfrageparameter berücksichtigt werden.

Ein Beispiel, wie Sie dies tun würden:

add_action( 'pre_get_posts', 'wpse5477_pre_get_posts' );
function wpse5477_pre_get_posts( $query )
{
    if ( ! $query->is_main_query() || $query->is_admin() )
        return false; 

    if ( $query->is_category() ) {
        $query->set( 'post_type', 'video' );
        $query->set( 'posts_per_page', 6 );
    }
    return $query;
}

Dieser Code wird in Ihren functions.php eingefügt.

Zuerst prüfen wir, ob dies die Hauptschleife ist und nicht Ihr Administrationsbereich. pre_get_posts kann sich auf den Administrator auswirken.

Wenn dies eine Kategorie ist, ändern wir den $query.

Und dann gib den $query zurück.

Weitere Informationen finden Sie hier: https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

5
ngearing