web-dev-qa-db-de.com

404 Fehler bei der Paginierung nicht gefunden

Normaler Beitrag (kein benutzerdefinierter Beitragstyp), ich habe alles getan, was ich tun sollte, aber 404 Fehler in der Paginierung nicht gefunden. Hier ist mein Code

$category_id = get_query_var('cat'); //Using this to get category ID to meet some special requirements
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

        $args = array(
            'posts_per_page' => 4,
            'numberposts'    => 50,
            'paged' => $paged,
            'cat' => $category_id
        );

        query_posts($args);
        if ( have_posts() ) : while ( have_posts() ) : the_post(); 
        $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'single-post-thumbnail' );
        ?>
        <div id="post-item">
        <div class="thumb"><img src="<?php echo get_stylesheet_directory_uri(); ?>/timthumb.php?src=<?php echo $image[0]; ?>&w=224&h=224&zc=1" /></div>

        <div class="detail">
            <h2 class="wrtitle"><span class="blue"><?php  $category = get_the_category(); echo $category[0]->cat_name; ?> : </span><?php the_title(); ?></h2>
            <div class="date"><?php the_date(); ?></div>
            <div class="excerpt"><?php the_excerpt(); ?></div>
        </div>
        <div class="rmore"><a href="<?php the_permalink(); ?>"><img src="<?php echo get_stylesheet_directory_uri(); ?>/images/readmore.png" /></a></div>
        </div>
        <?php endwhile; 
        wp_reset_postdata();
        else: ?>
     <p><?php _e('No posts found'); ?></p>

    <?php endif; ?>

    <!-- Pagination Part -->
    <div id="pagination">
        <div class="next"><?php next_posts_link('next &raquo;') ?></div>
        <div class="prev"><?php previous_posts_link('&laquo; previous') ?></div>
    </div>

Ich brauche deinen Vorschlag.

1
IFightCode

Tragen Sie Ihren Code in die Vorlagendatei category.php ein.

Entfernen Sie den gesamten Teil vor der Schleife: Sobald Sie in der Kategorieschablone sind, müssen Sie die Kategorie nicht mehr abrufen, die Seite abrufen und die Abfrage mit query_posts erneut ausführen.

Ihr category.php sollte also einfach so aussehen:

if ( have_posts() ) : while ( have_posts() ) : the_post(); 
  $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'single-post-thumbnail' );
?>

... post markup here

<?php endwhile; 

else: ?>

<p><?php _e('No posts found'); ?></p>

<?php endif; ?>

<!-- Pagination Part -->
<div id="pagination">
  <div class="next"><?php next_posts_link('next &raquo;') ?></div>
  <div class="prev"><?php previous_posts_link('&laquo; previous') ?></div>
</div>

Um zu erzwingen, dass diese Vorlage nur 4 Beiträge pro Seite anzeigt, verwenden Sie in functions.php:

add_action('pre_get_posts','four_post_per_cat');

function four_post_per_cat( $query ) {
  if ( ! is_admin() && is_main_query() && is_category() ) {
    $query->set('posts_per_page', 4);
  }
}

Danach sind numberposts und posts_per_page Synonyme, numberposts ist jedoch veraltet. Wenn Sie für sie unterschiedliche Werte festlegen, wird numberposts nichts tun (oder posts_per_page nichts tun, ich kann mich nicht erinnern ... verwenden Sie jedoch einen von ihnen).

Wenn Ihr Umfang die Anzahl der erreichten Beiträge (auf allen Seiten) einschränkt, verwenden Sie den Filter post_limit . Fügen Sie in functions.php außerdem Folgendes hinzu:

add_filter( 'post_limits', 'cat_post_limits' );

function cat_post_limits( limit ) {
    return ( is_category() ) ? 'LIMIT 0, 50' : $limit;
}

Wenn Sie meinen Tipps folgen, lösen Sie nicht nur Ihr Problem, sondern verbessern auch die Leistung: query_posts ist in Bezug auf die Leistung sehr schlecht: Verwenden Sie ihn niemals.


Ein Hinweis : Wenn Sie eine Umschreiberegel hinzugefügt haben, müssen Sie die Regeln unbedingt leeren. Gehen Sie in Ihrem Dashboard zu Einstellungen -> Permalinks und klicken Sie auf "Änderungen speichern".


PS: Wenn Sie maximal 50 Beiträge haben, ist 50 nicht durch 4 teilbar. Die letzte Seite enthält also 2 Beiträge. Warum setzen Sie das Limit nicht auf 52 oder 48?

2
gmazzap