previous_post_link(), next_post_link() の第3引数にtrue、第5引数にタクソノミースラッグを指定すると、現在の投稿についているターム(第5引数のタクソノミーのターム)と同じタームがついた前後の投稿へのリンクが表示される筈ですが、そういう使い方とは違うんでしょうか。
なお、同じタクソノミーの複数のタームが投稿についている場合、どのタームを対象にするかは選べないそうです。ただし、リンク先の投稿を取得する関数get_adjacent_postのフィルター get_previous_post_where, get_next_post_where を使えばできるかもしれません。
gblsmさん
さっそくの回答ありがとうございます。
タクソノミーA 全て(親),タームA,タームB,タームC,タームD(子4個) 5個
タクソノミーB タームA,タームB,タームC,タームD,タームE,タームF 6個 親子なし
カスタム投稿の1記事あたり
タクソノミーAには全て+ABCDのどれか1個に属します
タクソノミーBには1個~6個属します。
<?php previous_post_link(‘%link’, ‘前の記事へ’, TRUE,”,タクソノミーA); ?>
<?php next_post_link(‘%link’, ‘次の記事へ’, TRUE,”,タクソノミーA); ?>
上記のように記述すると、タクソノミーA間のページ送りになってしまいます。
構成がちょっと特殊なので、後者の可能性が高いですね。少々調べてみます。
アイデアだけなんですが… フィルター get_{$adjacent}_post_where にフックした関数は、第2引数として $in_same_term(previous_post_link, next_post_link の第3引数)をそのまま受け取ります。$in_same_term は真偽値を渡す仕様で、ここにタームのID(ゼロではない)を渡しても true と判断してくれるので正常に動きます。しかし true の代わりにタームIDを渡すと、フックした関数がタームIDを受け取れるので、それを投稿取得クエリのWHERE句へANDで追加する(そのタームに限定する)ことができそうです。
my_previous_post_join
my_next_post_join
my_previous_post_where
my_next_post_where
この4つのフィルターを組み合わせて解決できました!
ありがとうございました♪
get_previous_post_join
get_next_post_join
get_previous_post_where
get_next_post_where
あ!こっちでした