サポート » 使い方全般 » ページャーと記事数があわない

  • 解決済 yyy111

    (@knon-disign)


    タームの一覧ページから飛んだ先で、
    taxonomy-tax_topics.phpというテンプレートファイルを使用し、
    同一タームに属する記事一覧を3記事表示しています。

    タームA クリック→ タームAに属する記事一覧を3件表示するページ
    タームB
    タームC

    ページャーにはプラグインのwp-paginaviを使用しており、
    wp-paginavi側の設定で記事が多い場合は、
    5個づつページャーが表示される指定にしております。

    記事が少ない場合は(記事数6)二個のページャーで収まって欲しいのですが、該当数の記事がない場合(15記事未満)でも5個のページャーが出てしまいます。

    存在する分の記事取得とページャー遷移は問題なく行えますが、

    ページャーの5ページ目をクリックすると、
    記事は表示されませんが404にもならず、
    var_dumpで出した部分は int(5)に、
    ページャーは非表示になります。

    ソースは下記を記載しております。

    `
    <?php $paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1;?>
    <?php $term = array_shift(get_the_terms($post->ID, ‘tax_topics’)); ?>
    <?php var_dump($paged)?>

    <?php $tax_posts = get_posts(‘post_type=topics&posts_per_page=3&taxonomy=tax_topics&term=’.esc_html($term->slug). ‘&paged=’ . $paged); if($tax_posts): ?>
    <ul>
    <?php foreach($tax_posts as $tax_post): ?>
    <li><a href=”<?php echo get_permalink($tax_post->ID); ?>”><?php echo get_the_title($tax_post->ID); ?></a></li>
    <?php endforeach; ?>
    </ul>
    <?php if(function_exists(‘wp_pagenavi’)) : wp_pagenavi(); endif; ?>
    <?php endif; ?>
    `

    環境
    wordpress 3.5.1
    wp-pagenavi バージョン 2.83

    テンプレート taxonomy-tax_topics.php
    カスタム投稿 Topics
    タクソノミー tax_topics
    ターム 自動

    ページャーと記事数を合わせたいのですが、
    お手数おかけいたしますが、ご教授頂けますと幸いです。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック投稿者 yyy111

    (@knon-disign)

    ソースが記事に含まれてしまいましたので修正します

    <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;?>
    <?php $term = array_shift(get_the_terms($post->ID, 'tax_topics')); ?>
    <?php var_dump($paged)?>
    
    <?php $tax_posts = get_posts('post_type=topics&posts_per_page=3&taxonomy=tax_topics&term='.esc_html($term->slug). '&paged=' . $paged); if($tax_posts): ?>
    <ul>
    <?php foreach($tax_posts as $tax_post): ?>
    <li><a href="<?php echo get_permalink($tax_post->ID); ?>"><?php echo get_the_title($tax_post->ID); ?></a></li>
    <?php endforeach; ?>
    </ul>
    <?php if(function_exists('wp_pagenavi')) : wp_pagenavi(); endif; ?>
    <?php endif; ?>
    モデレーター jim912

    (@jim912)

    get_posts では、ページャーは正常に働きません。
    これは、記事の取得が関数内で全て簡潔しており、他から最大何ページあるかという情報が得られないためです。

    pre_get_postsフックを使って、記事取得条件を変更するのが最も間違いがありません。

    トピック投稿者 yyy111

    (@knon-disign)

    >jim912様

    なるほど、ありがとうございます!
    ちょうど先程力尽きて、違うやり方を模索していたところ、
    ご記載頂いていた、is_main_query()とpre_get_postsの方法で解決致しました。

    記載方法が悪いからだと思っておりましたが、get_postsの使い方が間違って
    いたんですね。

    下記のソースで実現できました

    functions.php

    add_action('pre_get_posts','topics_posts_type');
    function topics_posts_type( $wp_query ){
    	if(!is_admin() && $wp_query->is_main_query() && (is_tax('tax_topics'))){
    		$wp_query->set( 'post_type', array('topics'));
    		$wp_query->set( 'posts_per_page', 3 );
    	}
    }

    taxonomy-tax_topics.php

    <?php if (have_posts()) : ?>
    	<?php while (have_posts()) : the_post();?>
    		<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php endwhile; ?>
    	<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); };?>
    <?php endif; ?>

    どうもありがとうございます!

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「ページャーと記事数があわない」には新たに返信することはできません。