• 各記事にカスタムフィールドでフラグとして1の値を設定できるようにしてあり、
    画面表示したときにセッションを調べ特定の値が格納されていたときのみ、カスタムフィールドのフラグが設定してある記事を表示させようとしています。
    記事一覧はpre_get_postsで対応できましたが、記事詳細の隣接エントリーのリンクへの対応がわかりません。
    希望としては、次のエントリーのリンクを調べ、条件にあっていないものは除外していくようにしたいです。

    例:エントリーA、B(1が付与)、C(1が付与)、D、が登録されていてセッションに特定の値が格納されていない場合場合、
    エントリーAの詳細記事で次のエントリーリンクはBとCを除外してDのリンクをつける
    セッションに特定の値が格納されていた場合、
    エントリーAの詳細記事で次のエントリーリンクはBとする。

    ご助言宜しくお願いします。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • 実際に動作させてみた訳ではないのですが、どのようにして「隣接エントリーへのリンクを表示」するかを調べてみました。例えば「次の投稿」に相当するテンプレートタグ next_post_link は、WordPress-3.8.1-ja 本体のファイル wp-includes/link-template.php が定義していました。

    next_post_link は関数 get_next_post_link を呼び出しており、get_next_post_link は 関数 get_adjacent_post_link を呼び出します。さらに get_adjacent_post_link は関数 get_adjacent_post を呼び出します。(何れも同じphpファイルにあります。)

    関数 get_adjacent_post が実行している内容は、ざっくりとしか理解できていないので間違っているかもしれませんが、次のような内容です。

    1. 関数 get_post で現在の投稿を取得。
    2. その投稿のタイムスタンプを取り出す。
    3. 次の投稿なら「そのタイムスタンプより新しい投稿を古い順」、前の投稿なら「そのタイムスタンプより古い投稿を新しい順」に並べるソート条件を用意する。
    4. 用意したソート条件で投稿を検索して、結果の先頭だけを取得する。

    そして、この get_adjacent_post にはフィルターが3つ用意されています。SQL文を組み立てる話になってしまうので、わかりやすく説明できないのですが、検索条件(2種類)とソート条件をそのフィルターで変更できるようです。「次の投稿」の場合、下記の3つです。

    • get_next_post_join … 投稿を検索するSQL文の join 句を変更可能
    • get_next_post_where … 同、where 句を変更可能
    • get_next_post_sort … 同、ソート用の order by 句を変更可能

    shogo_misakiさんはカスタムフィールドを条件に追加なさりたいので、フィルター get_next_post_join もしくは get_next_post_where を使えばよいのではないでしょうか。特にjoin句の部分は、タグ(taxonomy)によって投稿を検索するのに使われているようですので、カスタムフィールドにも当てはめやすいのではないかと思います。

    なお、これらのフィルターの説明が下記リンク先にありました。
    WordPress hook directory
    get_{$adjacent}_post_join
    get_{$adjacent}_post_where

1件の返信を表示中 - 1 - 1件目 (全1件中)

トピック「記事詳細で次のエントリーへのリンクに特定条件を加えての選出する方法」には新たに返信することはできません。