gatespace様
ご回答いただきありがとうございます!
お書きいただいたアドバイスを元に、下記のように改修したのですがちょっと様子がヘンです…?
<?php $tags = get_the_tags(); ?>
<?php if ($tags): foreach($tags as $tag): ?>
<h4><?php echo $tag->name; ?>タグの記事</h4>
<ul>
<?php if(get_next_post(true,'','post_tag')): ?>
<li class="nextpost"><?php next_post_link('%link','%title',TRUE,'','post_tag'); ?> →</li>
<?php endif; ?>
<?php if(get_previous_post(true,'','post_tag')): ?>
<li>← <?php previous_post_link('%link','%title',TRUE,'','post_tag'); ?></li>
<?php endif; ?>
</ul>
<?php endforeach; endif; ?>
【テスト環境】
記事1 タグ「A」
記事2 タグ「A」「B」
記事3 タグ「B」
【表示結果】
・記事1のsingle.php
———————-
Aタグの記事
記事2→
———————-
・記事2のsingle.php
———————-
Aタグの記事
←記事1 記事3→
Bタグの記事
←記事1 記事3→
———————-
・記事3のsingle.php
———————-
Bタグの記事
←記事2
———————-
記事1と3は希望どおりの表示なのですが、記事2は
———————-
Aタグの記事
←記事1
Bタグの記事
記事3→
———————-
となってほしいのですがなってくれません。
もう少し調べてみます…!
get_next_postやnext_post_linkでは
特定のタクソノミー(デフォルトではカテゴリー)に対して同じタームがあればという条件なので、そこまで細かく指定できません。
提示してもらった例で言うと
記事2(タグ「A」「B」)からは、「AまたはBを持つタグ」という条件です。
タグごとに事細かくやるのであれば、next_post_linkやprevious_post_linkを使わないでget_postsでゴリゴリ書くしか無いかも。
Codexに単純な前後リンクの例文があるのでこれを参考にget_posts 時にタームで絞り込めばできそうな気もしますが・・・
http://codex.wordpress.org/Template_Tags/get_posts#Posts_with_Previous_Next_Navigation
gatespace様
上記、ご回答いただきありがとうございます!
アドバイスいただいたとおり、get_postsを使い下記のような実装をしたところ、希望していたどおりの挙動になりました! ありがとうございます。
<?php $tags = get_the_tags(); ?>
<?php if ($tags): foreach($tags as $tag): ?>
<h4><?php echo $tag -> name; ?>タグの記事</h4>
<ul>
<?php
$args = array (
'post_type' => 'post',
'posts_per_page' => -1,
'tax_query' => array (
array (
'taxonomy' => 'post_tag',
'field' => 'slug',
'terms' => $tag -> slug
)
)
);
$postlist = get_posts( $args );
$ids = array();
foreach ($postlist as $thepost) {
$ids[] = $thepost->ID;
}
$thisindex = array_search($post->ID, $ids);
$previd = $ids[$thisindex+1];
$nextid = $ids[$thisindex-1];
if (!empty($nextid)) {
echo '<li class="nextpost"><a href="' . get_permalink($nextid). '">'.get_the_title($nextid).'</a></li>';
}
if (!empty($previd)) {
echo '<li class="prevpost"><a href="'.get_permalink($previd).'">'.get_the_title($previd).'</a></li>';
}
?>
</ul>
<?php endforeach; endif; ?>