it-swarm.com.de

Die Paginierung zeigt 404 nach einer bestimmten Anzahl von Seiten

Dieses Problem ist in meiner index.php (obwohl ich darüber nachdenke, diesen Code stattdessen nach home.php zu verschieben). Ich habe eine benutzerdefinierte WP_Query, die einige Beiträge pro Seite anzeigt, wobei die Beitragstypen angegeben werden (ich habe einen benutzerdefinierten Typ, den die Hauptabfrage nicht anzeigen konnte). Ich habe 42 Posts atm (es ist das Wordpress-Thema plus etwas, das ich zuvor geschrieben habe) und ich habe 3 Posts pro Seite eingestellt, was bedeutet, dass ich 15 Seiten haben sollte. Aber ab der 6. Seite bekomme ich einen 404-Fehler.

Code in index.php

<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

$args = array(
   'posts_per_page' => 3,
   'paged' => $paged,
   'post_type' => array('post', 'blog_post'),
);

$query = new WP_Query($args); ?>
<?php echo $query->max_num_pages ?>
<?php while ( $query->have_posts() ) : $query->the_post() ?>

<section class="article-container col-md-12">

<?php if (has_post_thumbnail()) the_post_thumbnail("post-thumbnail", array('class' => 'img-responsive col-md-5')); ?>
<article class="col-md-7">
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<?php the_excerpt(); ?>
<a href="<?php the_permalink(); ?>" class="article-read-more">LEGGI TUTTO</a>
</article>
</section>
<?php endwhile;  ?>
<?php wp_reset_postdata(); ?>

<?php if (function_exists("pagination")) {
    pagination($query->max_num_pages);
} ?>

Paginierungsfunktion (ich habe sie angepasst, weil ich mein Markup haben wollte)

function pagination($pages = '', $range = 4) {  
     $showitems = ($range * 2)+1;  

     global $paged;
     if(empty($paged)) $paged = 1;

     if($pages == '') {
         global $wp_query;
         $pages = $wp_query->max_num_pages;
         if(!$pages) {
             $pages = 1;
         }
     }   

     if(1 != $pages) {
         echo '<section class="text-center">';
         echo '<ul class="pagination">';

         if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<li><a href='".get_pagenum_link(1)."'>&laquo; First</a></li>";
         if($paged > 1 && $showitems < $pages) echo "<li><a href='".get_pagenum_link($paged - 1)."'>&lsaquo; Previous</a></li>";

         for ($i=1; $i <= $pages; $i++) {
             if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems )) {
                 echo ($paged == $i)? "<li class=\"active\"><a href=\"#\">".$i."</a></li>":"<li><a href='".get_pagenum_link($i)."'>".$i."</a></li>";
             }
         }

         if ($paged < $pages && $showitems < $pages) echo "<li><a href=\"".get_pagenum_link($paged + 1)."\">Next &rsaquo;</a></li>";  
         if ($paged < $pages-1 &&  $paged+$range-1 < $pages && $showitems < $pages) echo "<li><a href='".get_pagenum_link($pages)."'>Last &raquo;</a></li>";

         echo "</ul>";
         echo "</section>";
     }
}

In Anbetracht dessen, dass ich die Hauptabfrage nicht so verwenden kann, wie sie ist, und eine Lösung damit nicht zutrifft, was kann ich tun? Jede Hilfe wird geschätzt.

2
Daniele Squalo

Das Problem ist, dass WordPress die Hauptabfrage vor Ihrer benutzerdefinierten Abfrage ausführt (und die Hauptabfrage nur auf dem Standardposttyp basiert).

Sie können die Hauptabfrage abfangen, ändern und dann wie folgt verwenden

function add_blog_post_to_query( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'post_type', array('post', 'blog_post') );
        $query->set( 'posts_per_page', 3 );
    }
}
add_action( 'pre_get_posts', 'add_blog_post_to_query' );

Wenn Sie Ihre benutzerdefinierte Funktion pagination trotzdem verwenden möchten, würden Sie sie so nennen

if ( function_exists( 'pagination' ) ) {
    global $wp_query;
    pagination( $wp_query->max_num_pages );
}

Anstatt Ihre benutzerdefinierte Abfrage zu verwenden, können Sie jetzt die folgenden Standardfunktionen verwenden:

if ( have_posts() ) :

    /* Start the Loop */
    while ( have_posts() ) : the_post();

        // your markup here

    endwhile;

else :

    // no posts found

endif;
3
Jared Cobb