web-dev-qa-db-ja.com

404ページ付けエラーが見つかりません

通常の投稿(カスタム投稿タイプではありません)、私がするべきすべてのことをしましたが、404ページネーションにエラーが見つかりませんでした。これが私のコードです

$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>

あなたの提案が必要です。

1
IFightCode

あなたのコードをテンプレートファイルcategory.phpに入れてください。

ループの前にすべての部分を削除します。カテゴリテンプレートに入ったら、カテゴリを取得し、ページを取得し、query_posts..を使用してクエリを再実行する必要はありません。

だからあなたのcategory.php 単純に のようになるべきです:

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>

そのテンプレートに1ページに4回のフォレストしか表示させないようにするには、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);
  }
}

その後のnumberpostsposts_per_pageは同義語ですが、numberpostsは非推奨です。それらに異なる値を設定するとnumberpostsは何もしません(あるいはposts_per_pageは何もしません。覚えていません...しかし、そのうちの1つを使用してください)。

範囲が(すべてのページで)到達した投稿の総数を制限している場合は、post_limit addで functions.php フィルターを使用します。

add_filter( 'post_limits', 'cat_post_limits' );

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

query_postsはパフォーマンスに関して非常に悪いので、絶対に使用しないでください。


:書き換え規則を追加した場合は、必ず規則をフラッシュしてください。あなたのダッシュボードで 設定 - >パーマリンク に行き、 "Save Changes"をクリックしてください。


PS:あなたが最大50投稿になった場合、50は4で割り切れないので、最後のページは2投稿になります..なぜ52または48に制限を設定しないのですか?

2
gmazzap