サポート » 使い方全般 » カテゴリーのページで投稿一覧をサイドバーに全部表示させたい。

  • 解決済 eijiy

    (@eijiy)


    WordPress3.0日本語版で、1ページの表示件数を10に設定したうえで、例えば開いた記事のページがWordPressというカテゴリーの場合、その投稿一覧をサイドバーに全部表示させたいと思い、以下のコードをjQテーマのsidebar.phpに書き足していますが、12件ある投稿が10件しか表示されません。

    <div class="cate_li">
    <h4>このカテゴリーの投稿一覧</h4>
    <?php
    $cat = get_the_category(); $cat = $cat[0];
    $cat = $cat->cat_ID;
    $posts = get_posts("order=desc&category=$cat&numberposts=");
    ?>
    <?php foreach($posts as $post): ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </div>

    これを全部表示させるにはどうしたらいいでしょうか。

    以下がsidebar.phpの全コードです。

    <?php
    /* This code retrieves all our admin options. */
    global $options;
    foreach ($options as $value) {
    	if (get_settings( $value['id'] ) === FALSE) { $$value['id'] = $value['std']; } else { $$value['id'] = get_settings( $value['id'] ); }
    }
    ?>
    
    <div id="right">
    <p id="toggle-all"><a href="#" id="toggle" class="hide-all">Toggle</a></p><br /><br />
    <div class="cate_li">
    <h4>このカテゴリーの投稿一覧</h4>
    <?php
    $cat = get_the_category(); $cat = $cat[0];
    $cat = $cat->cat_ID;
    $posts = get_posts("order=desc&category=$cat&numberposts=");
    ?>
    <?php foreach($posts as $post): ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </div>
    <div class="clearfix"></div>
    <!-- widget -->
    <?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('sidebar_right') ) : ?>
    <div class="widget">
    <h4><a href="#" title="Toggle" class="hide_widget">Categories</a></h4>
    <ul>
    <?php wp_list_categories('title_li=0&categorize=0'); ?>
    </ul>
    </div>
    <div class="widget">
    <h4><a href="#" title="Toggle" class="hide_widget">Blogroll</a></h4>
    <ul>
    <?php wp_list_bookmarks('title_li=0&categorize=0'); ?>
    </ul>
    </div>
    <div class="widget">
    <h4><a href="#" title="Toggle" class="hide_widget">Meta</a></h4>
    <ul>
    <?php wp_register(); ?>
    <li><?php wp_loginout(); ?></li>
    <li><a href="<?php bloginfo('rss2_url'); ?>" title="<?php _e('Syndicate this site using RSS'); ?>"><?php _e('<abbr title="Really Simple Syndication">RSS</abbr>'); ?></a></li>
    <li><a href="<?php bloginfo('comments_rss2_url'); ?>" title="<?php _e('The latest comments to all posts in RSS'); ?>"><?php _e('Comments <abbr title="Really Simple Syndication">RSS</abbr>'); ?></a></li>
    <?php wp_meta(); ?>
    </ul>
    </div>
    <?php endif; // endif widget ?>
    <div class="flickr"><!-- 追加 flickr feeder -->
    <p>Flickr tag:sky</p>
    <?php echo gluedideas_FlickrFeeder::displayFeed(); ?>
    </div>
    </div>

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

    (@eijiy)

    現状はこちらです。

    未検証で申し訳ないですがこれで全件表示されませんか?

    $posts = get_posts("order=desc&category=$cat&numberposts=-1");

    トピック投稿者 eijiy

    (@eijiy)

    umbrella_processさん、ありがとうございます。

    簡単なことでお騒がせいたしました。

    おお、動いたなら良かったです^^

    トピック投稿者 eijiy

    (@eijiy)

    一旦解決としましたが、これでは記事も全部12件表示されてしまいます。

    記事は10件、サイドバーの投稿一覧は全部12件表示させたいのですが、方法があればどなたかご教授下さい。

    テーマの構造がよく分かりませんので推測ですが、

    <?php foreach($posts as $post): ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>

    このあとにwp_reset_query();を追加して直るかもしれません。

    トピック投稿者 eijiy

    (@eijiy)

    umbrella_processさん、wp_reset_query();を追加しなくてもWordPressで設定した数の記事が表示され、開いたカテゴリーページの投稿一覧もサイドバーに全件表示されるようになりました。

    しかし、別の問題があり、例えば、1ページの記事表示数を5件と設定して、WordPressというカテゴリーの記事が12件あるわけですが、最初に5件表示され、次ページを開くとまた同じ記事が5件表示され、更に次ページを開くとまた同じ記事が、今度は2件表示されます。

    記事の数は12件で合っているのですが、同じ記事しか表示されません。どうしたらいいでしょうか、ご教授下さい。

    投稿一覧を表示するsidebar.phpのコードは以下の通りで、if文でカテゴリーのみ表示させています。尚、該当urlはこちらです。

    <?php if (is_category()) : ?>
    	<div class="cate_li">
    		<h4>このカテゴリーの投稿一覧</h4>
    		<?php
    			$cat = get_the_category(); $cat = $cat[0];
    			$cat = $cat->cat_ID;
    			$posts = get_posts("order=desc&category=$cat&numberposts=-1");
    		?>
    		<?php foreach($posts as $post): ?>
    			<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
    		<?php endforeach; ?>
    	</div>
    <?php else : ?>
    <?php endif; ?>

    やはりwp_reset_queryだと思います。

    トピック投稿者 eijiy

    (@eijiy)

    以下の様にしても変わりません。

    <?php if (is_category()) : ?>
    	<div class="cate_li">
    		<h4>このカテゴリーの投稿一覧</h4>
    		<?php
    			$cat = get_the_category(); $cat = $cat[0];
    			$cat = $cat->cat_ID;
    			$posts = get_posts("order=desc&category=$cat&numberposts=-1");
    		?>
    		<?php foreach($posts as $post): ?>
    			<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
    		<?php endforeach; ?>
            <?php wp_reset_query(); ?>//この一行を書き加えても次ページが同じ記事
    	</div>
    <?php else : ?>
    <?php endif; ?>

    そうですか…
    numberpostsに-1を入れてからの不具合と言うことでしょうか?

    トピック投稿者 eijiy

    (@eijiy)

    試しに上記のコードを削除したらページ送りが正しく機能します。

    何かいい解決策はないものでしょうか、宜しくお願い致します。

    お手間かけてすみません、正確にお願いします。
    -1を削除したところ、ページ送りが正常になったということでしょうか。
    get_posts()がメインのループに影響を及ぼすとは考えにくいのですが…。。

    トピック投稿者 eijiy

    (@eijiy)

    いいえ、投稿一覧を表示する上記のコードを全てを削除した場合、ページ送りが正しく機能するです。

    以下の様にした場合はWordPressの設定、1ページ5件と同じ5件しか投稿一覧が表示されません。

    <?php if (is_category()) : ?>
    	<div class="cate_li">
    		<h4>このカテゴリーの投稿一覧</h4>
    		<?php
    			$cat = get_the_category(); $cat = $cat[0];
    			$cat = $cat->cat_ID;
    			$posts = get_posts("order=desc&category=$cat&numberposts=");
    		?>
    		<?php foreach($posts as $post): ?>
    			<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
    		<?php endforeach; ?>
    	</div>
    <?php else : ?>
    <?php endif; ?>

    なるほど、現象を理解しました。
    なんとなく、変数がWordPressのグローバル変数とバッティングしてるのかも、と思います。
    $postsを$category_posts、$postを$category_postに変更してみてはどうでしょうか。

    $posts = get_posts("order=desc&category=$cat&numberposts=");

    ん~、numberposts=-1が抜けてません?その前までのコードにはあったような・・・?
    デフォルト5件表示、0だとページの最大数まで表示なので「WordPressの設定、1ページ5件と同じ5件しか投稿一覧が表示されません」になるような気がします。

15件の返信を表示中 - 1 - 15件目 (全18件中)
  • トピック「カテゴリーのページで投稿一覧をサイドバーに全部表示させたい。」には新たに返信することはできません。