サポート » 使い方全般 » トップページに特定のカテゴリ(複数)の最新記事を1件表示したい。

  • 解決済 tama-wp

    (@tama-wp)


    WP2.5.1日本語版を使用しています。
    PHP4.4.2 MySQL4.0.26です。

    (実現したいこと)
    特定のカテゴリを除いた、複数カテゴリの最新記事1件をトップページに表示したい

    (現在の状況)

    • homeというページを作り、トップページとして設定しています。
    • index.phpとは別にhome.phpを新たに作り、homeページのテンプレートとして設定しました。
    • カテゴリは現在20個あって、随時増減の可能性があります。除外したいカテゴリは3〜5個程度。

    (やってみたけどうまくいかなかった事)

    • get_postsを使った場合、1つのカテゴリ(もしくはすべてのカテゴリ)に対する最新記事1件表示はできましたが、複数カテゴリを対象にする設定がわからない。(できないのかな?)
    • プラグインCustomizable Post Listingsを使用した場合、表示レイアウトを自分の望むようにすることができない。このこと以外は実現したいことがほぼできているが、今後のことを考えて、できればカテゴリを除外する設定がしたい。

    見よう見まねで作った最新記事を1件表示するクエリーに、特定のカテゴリを除外する設定をすればよいと思うのですが、その方法がわかりません・・・

    <?php
    global $wpdb;
    $querystr ="
    SELECT *
    FROM $wpdb->posts
    WHERE post_type = 'post'
    AND post_status = 'publish'
    AND post_date <= NOW()
    ORDER BY post_date DESC
    LIMIT 1
    ";
    $posts = $wpdb->get_results($querystr);
    foreach($posts as $post):
    setup_postdata($post);
    ?>
    
    <!--記事:アーカイブページと同じレイアウトにする-->
    
    <?php endforeach;?>

    以上、長くなりましてすみません。うまく伝わっているとよいのですが・・・
    何かよい方法をご存知でしたら、是非アドバイスをお願い致します。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • クエリを書かなくても、 query_posts(); でならいける気がします。
    下記の例の cat=xxxx の部分では、複数のカテゴリをカンマ区切りで指定します。
    除外するカテゴリーはマイナスを付けて指定できます (ex. cat=-1,-2,-3,-5)

    <?php
    query_posts('cat=xxxx&showposts=1');
    
    if ( have_posts () ) :
        while ( have_posts() ) :
            the_post();
    ?>
     :
     :
    <?php
        endwhile;
    endif;
    ?>

    home ページの内容のループ後ならそのままでいいのですが、
    もしも上記のループが先で、その後 home ページのループを実行したい場合には、
    home ページのループを開始する前に、

    <?php query_posts($query_string); ?>

    で再び本来のクエリを復活させます。
    で、どうでしょうか?

    # $query_string について若干内容を修正しました。

    すみません、記述ミスがありました。

    // DELETE if ( have_posts () ) :
    if ( have_posts() ) :

    ご期待通りの結果になることを願っています。

    トピック投稿者 tama-wp

    (@tama-wp)

    mizube様

    アドバイス頂きましてありがとうございます。
    カテゴリを除外しての最新記事1件の表示はご指示頂いたコードで表示することができたのですが、新たな問題が発生してしまいました。

    (問題)
    ☆コメント表示欄とコメントフォームが表示されない。

    コメント部分はこのように記述しています。

    <?php
    	if (function_exists('paged_comments_template')) {
    		paged_comments_template();
    	} else {
    		comments_template();
    	}
    ?>

    (状況)
    Paged Commentsプラグインを使用しています。
    get_posts()時は問題なく表示されていました。
    すでにコメントは投稿されています。
    homeのループよりも後に記述しています。

    query_postsのドキュメント部分を読んでみましたが・・・英語難しくてよくわかりませんでした(汗)
    もし思い当たる節などありましたら、是非ご教授頂ければと思います。
    よろしくお願い致します。

    表示させたいコメントは、最新記事に対するものでしょうか?
    それとも home に対するものでしょうか?

    それからコメント部分の記述ですが

    <?php // begin - home ループ ?>
    A
    <?php // end - home ループ ?>
    B
    <?php // begin - 最新記事 ループ ?>
    C
    <?php // end - 最新記事ループ ?>
    D

    と仮に記号で位置を表した場合、A, B, C, D のどの位置に記述していますか?

    簡潔に言えば、
    前提として、コメント部分の記述はループ内に記述する必要があります。
    home へのコメントを最新記事のループの後 (D) に表示させたい場合は、
    D の位置に <?php query_posts($query_string); ?> で home のクエリを復活させて、
    新たにループを作成し、その中にコメント部分の記述を入れてみて下さい。

    最新記事へのコメントを最新記事ループ内に表示させたい場合は、
    コメント部分の記述をとりあえず

    <?php
        $wp_query->is_single = true; // is_single() を装う
        if ( function_exists( 'paged_comments_template' ) ) {
            paged_comments_template();
        } else {
            comments_template();
        }
        $wp_query->is_single = false; // 念のため元に戻しておく
    ?>

    としてみてください。

    # これは応急処置的な方法なので、やってよいことなのか私には判断できません。
    # より適切な方法をご存知の方がいらっしゃればご指摘ください、お願いします。。。

    トピック投稿者 tama-wp

    (@tama-wp)

    mizube様

    早速のアドバイスありがとうございます。
    説明不足で申し訳ありませんでした。
    追加質問させて頂いたのは最新記事のコメントの表示に関する質問でした。

    Cの位置にあるコメント表示部分でしたので、ご提示頂いたコードの通り
    $wp_query・・・を前後に追加することで無事に表示されるようになりました。

    応急処置的とのことですが
    今のところは特に問題なく表示されています!

    たくさんのわかりやすいアドバイス、本当にありがとうございました。
    思いきって質問してみてよかったです。
    また機会がありましたらよろしくお願い致します。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「トップページに特定のカテゴリ(複数)の最新記事を1件表示したい。」には新たに返信することはできません。