サポート » 使い方全般 » 同じタグのエントリをループ表示させたい

  • nakagawa-tomohiro

    (@nakagawa-tomohiro)


    はじめまして。中川と申します。
    ループ文をタグページで使う際に詰まってしまいました。
    皆さんの知恵をお貸し頂ければ幸いです。

    ■1: タグページで同じタグのエントリをループ表示させたい

    個別のタグページにアクセスした際、
    そのタグを使ったエントリを新しい順に全て表示させたいのですが、

    <?php $posts = get_posts(‘tag=タグ名’); ?>

    を使おうとしても、タグ名にそのページタグ名を表示する関数
    single_tag_titleをそのまま使えず、困っています。
    個別にタグ名を入れてテンプレートをいたずらに増やさず、
    関数を使ってうまくループを作る方法はありますでしょうか。

    ■2: 各記事の前後3つ分のエントリを表示させたい

    こちらも似たような質問になるかもしれませんが、
    個別の記事ページでループ表示を用いて、
    同じタグを使ったエントリを前後3エントリ分表示させたいと考えています。
    表示形式としては…

    ・・・
    3エントリ後の記事リンク
    2エントリ後の記事リンク
    1エントリ後の記事リンク
    現在の記事タイトル
    1エントリ前の記事リンク
    2エントリ前の記事リンク
    3エントリ前の記事リンク
    ・・・

    のように、真ん中に現在の記事タイトルがあって
    それを囲むように前後のエントリが並ぶようにしたいのです。

    この表示の実現についても、ご意見頂ければとてもありがたいです。

    説明不足の部分があれば、ぜひお知らせください。
    過去ログも読んだのですが、自分の目的に合うものがうまくみつかりませんでした。

    どうか、よろしくお願いします!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • 個別のタグページにアクセスした際、
    そのタグを使ったエントリを新しい順に全て表示させたいのですが、

    tag.phpあるいはis_tag()だけは全てのエントリを表示させる、ということですか?
    だとすると以下で実現できそうです。

    query_posts($query_string.”&showposts=0″);

    次の

    個別の記事ページでループ表示を用いて、
    同じタグを使ったエントリを前後3エントリ分表示させたいと考えています。

    はもっとコードを書かないといけないです。

    タグの一覧を取得
    それを用いて全記事を取得するクエリを発行
    データを取得順に配列へ保存
    現在の記事IDのindexを検索
    それをもとに前後の記事を抽出

    ですかね、条件とか考えると大変そうです。
    もっとイカした解決方法が他にあるかもです。

    モデレーター IKEDA Yuriko

    (@lilyfan)

    タグの一覧を取得
    それを用いて全記事を取得するクエリを発行
    データを取得順に配列へ保存
    現在の記事IDのindexを検索
    それをもとに前後の記事を抽出

    query_posts() ではちょっと難しそうなので SQL の発行ですね。「とある ID の投稿日時を SELECT」→「この日時より新しい/古いもので同じタグのものを3つ」という2段階とすれば、「全記事を取得」しなくても済みそうです (MySQL 4.1 以降ならサブクエリーでも OK)。wp_term_relationship と wp_posts を絡めつつ SELECT 文を書くわけです。おそらく WordPress コア内にそういう仕事をする SQL 文があるので参考にすればいいでしょう。

    あと、問題は、たいていの投稿でタグは複数ついていることが多いので、それぞれのタグごとに前後3つリンクを出すとなると、ごちゃごちゃしてしまうかもしれません。

    トピック投稿者 nakagawa-tomohiro

    (@nakagawa-tomohiro)

    taikikenさん、Illyfanさん、アドバイスありがとうございます。
    お返事が遅くなって申し訳ありません。

    同じタグのエントリを全て表示する方法は、
    taikikenさんのアドバイスを実践して成功しました。

    現在の状態例:http://canpassnote.net/tag/apple

    あとはシングルページで、前後のエントリを3つ表示する方法だけです。
    親切にアドバイスを頂けて凄くありがたいのですが、
    クエリなどの使い方・書き方が分からない初心者なので
    せっかく頂いたアドバイスを理解できずにいます…。
    Illyfanさんのおっしゃる「wp_term_relationshp」「wp_posts」を
    勉強してみたいと思います。

    もし有益な情報があれば、またお知らせ頂けると助かります。
    当方の目的は、

    特定のタグページからシングルページに飛んだ際、
    その特定のタグが使われている記事を前後3エントリ取得する、という事です。

    なにとぞ宜しくお願い致します。

    モデレーター IKEDA Yuriko

    (@lilyfan)

    Illyfanさんのおっしゃる「wp_term_relationshp」「wp_posts」を
    勉強してみたいと思います。

    現行のカテゴリー、タグの実装が大きく変化することはないと思いますが、SQL 生発行はテーブル構造が変わったときに対応できないという欠点があります。それを承知の上で開発する必要があります。

    link-template.php を見てみますと、同じカテゴリーの前後であれば、get_previous_post() の第1引数が $in_same_cat なので、そういうことができそうです。でも、タグとなると難しいですね。そもそもタグの場合、「前後の投稿を見せる」という使い方を想定していないのかもしれません。ただ、SQL 文をフィルターするフックがあるので、ここで category を tag に変えてしまえばいけるかもしれません。

    詳細については、link-template.php の中身を見てみてください。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「同じタグのエントリをループ表示させたい」には新たに返信することはできません。