サポート » テーマ » home.phpに特定のカテゴリの記事を表示させたい

  • 解決済 taakumi

    (@taakumi)


    初めてWordPressで独自テーマを作っているのですが、home.phpで特定のカテゴリの記事を1つだけ表示させたいと思っています。

    <?php
    $categories = get_categories('hide_empty=1');
    foreach ($categories as $category) :
    query_posts('cat=3&posts_per_page=1');
    if (have_posts()) : the_post();
    ?>
    
    <!-- begin post -->
    <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    	<div class="post-header">
    		<h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
    		<p><?php the_time('F j, Y') ?></p>
    	</div>
    	<div class="post-meta">
    		<ul>
    			<li>...</li>
    		</ul>
    	</div>
    </div>
    
    <!-- end post -->
    
    <?php endif; endforeach; ?>

    と打ち込んでみたところ、特定のカテゴリの記事には限定できたのですが、なぜか、同じ記事が複数表示されてしまいます。

    例えば、カテゴリA内に最新記事Bがあるとき、home.phpでカテゴリAの最新記事Bをひとつだけ表示したいのですが、上のコードだと記事Bが繰り返し表示されてしまいます。

    どの部分を変更すればよいでしょうか。
    ご回答よろしくお願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    どこかのサンプルを参考にされたのかと思いますが、1件表示するだけならforeachはいらないですね。
    てことは$categories = get_categories(‘hide_empty=1’);も別にいらないです。

    で、いらないとこを消すと

    <?php
    query_posts('cat=3&posts_per_page=1');
    if (have_posts()) : the_post();
    ?>
    (略)
    <?php endif; ?>

    になるわけなんですが、個人的には1件表示させて終わりならquery_postsじゃなくてget_postsが好みです。

    さて、ではなぜ始めの2行がいらないかはわかりますか??
    また、記事Bが繰り返し表示されていると思いますが、具体的には何回表示されていますか?
    なぜその回数になるのでしょうか?
    それが、今回のポイントだったりします。ぜひ考えてみてください。

    ヒント:http://ja.forums.wordpress.org/topic/2174?replies=6

    トピック投稿者 taakumi

    (@taakumi)

    ご回答ありがとうございます!他のフォーラムを参考にしました。
    早速試してみたところ出来ました。

    $categories = get_categories(‘hide_empty=1’);
    は複数カテゴリを取得する必要がない(今回は特定のカテゴリ)ので
    foreach ($categories as $category) :
    は1つのみを表示させたいため、と考えました。

    いま、

    【    カテゴリAの最新記事a    】
    【カテゴリAの記事b】【カテゴリAの記事c】
    【 カスタム投稿タイプBの一覧表示5件 】

    というレイアウトのサイトを制作しています。最新記事aは2カラム幅、記事b,cは1カラム幅のように記事ごとに表示を変えたいと考えています。この場合は、query_postsじゃなくget_postsのほうがよいですか?

    そもそも、それぞれの記事のカラム幅を変更する方法さえ分かっていないのですが…

    モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    いい感じですね。だいたいそんなとこです。
    $categories = get_categoriesの部分で存在するカテゴリーの情報を取得、
    foreach ($categories as $category) の部分で、それをループさせているので、
    修正前のコードでは、記事の投稿されてるカテゴリーの数だけ記事Bが表示されていたかと思います。

    さてさて、
    query_postsとget_postsは、ほぼ同じような感じで使えるんですが、違いは

    ・query_posts→メインループを作る、ページネーションを作れる
    ・get_posts→サブループを作る、指定した数の記事を表示しておしまい

    という風に個人的には理解しています。(超平たく言ってますが)
    今回はどれも表示件数が決まってるので、自分ならget_postsでやります。

    とはいえ、全部query_postsでやっても、最後にwp_reset_query();をちゃんと置けばいちおう大丈夫だと思います。(エラーにはならない。)
    厳密な定義はCodexなど公式なやつを読み込んでいただくとよいです。けっこう骨折れますが。

    記事のカラム幅のところは、CSSでなんとかかんとかがんばってください!
    ではでは。

    トピック投稿者 taakumi

    (@taakumi)

    ご返信遅れて申し訳ございません。
    詳しくありがとうございます。

    どうにか作ることが出来ました。
    ありがとうございます。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「home.phpに特定のカテゴリの記事を表示させたい」には新たに返信することはできません。