<?php previous_post_link('« %link','%title',TRUE) ?>
<?php next_post_link('%link »','%title',TRUE) ?>
投稿ページ内に上記コードで前後ページのページ遷移をしたいと思っております。
同一カテゴリー内でのページ遷移にしたいので第3引数にTRUEを入れておりますが、カテゴリー関係なくページ遷移してしまいます。
どんな理由が考えられますか?
single.php
<?php
if ( in_category(array('Aカテゴリー','Bカテゴリー') ) ) {
get_template_part( 'single' , 'a' );
}
else {
get_template_part( 'single' , 'b');
}
?>
single-b.php
<?php if(have_posts()): while(have_posts()): the_post(); ?>
<?php get_template_part('content'); ?>
<?php get_template_part('postinfo'); ?>
<?php comments_template(); ?>
<?php get_template_part('pagenation'); ?>
<?php endwhile; endif; ?>
pagenation.php
<p id="pagenation">
<span id="oldpage"><?php previous_post_link('%link','< %title',true); ?></span><span id="newpage"><?php next_post_link('%link','%title >',true); ?></span>
</p>
上記テンプレートの切り替えが影響しているのでしょうか?
よろしくお願いいたします。
補足です。
きちんとカテゴリー毎にページ遷移ができている他のテーマで試したところ、やはりカテゴリーに関係なくページ遷移してしまいます。
ということはテーマが問題ではなく、投稿方法やカテゴリー設定方法に問題があるのでしょうか?それぞれSLUGを付けてカテゴリーを作成しており、投稿時に属したいカテゴリーを選択して投稿しているだけなのですが…。
可能性の部分も含め、わかる方がいらっしゃいましたら教えてください。
利用中のテーマの「functions.php」に以下のコードを追加すると、ナビゲーションリンクのカテゴリー内限定に対応させる事が可能です。
※「Intuitive Custom Post Order」プラグインによる並べ替えのみ確認しました。
・「functions.php」
function where_re_override( $where, $in_same_term ) { if ( is_single() && $in_same_term == true ) { $taxonomy = 'category'; // ※タグまたはカスタムタクソノミーの場合は、ここを'post_tag'または'[タクソノミーのスラッグ]'に変更します。 $terms = get_the_category(); // $terms = get_the_terms( $post->id, $taxonomy ); // ※タグまたはカスタムタクソノミーに対応させる場合、上記の行の替わりに有効にします。 $where .= " AND tt.taxonomy = '" . $taxonomy . "' AND tt.term_id IN (" . $terms['0']->term_id . ")"; } return $where; } add_filter( 'get_previous_post_where', 'where_re_override', 10, 2); add_filter( 'get_next_post_where', 'where_re_override', 10, 2 );
※「$excluded_terms」による除外するカテゴリーの指定には対応していません。
※「$taxonomy」は「category」(カテゴリー)を指定していますが、タグやカスタムタクソノミー(※何れか1種類)に対応させる事も可能です。(上記コード内と次のドキュメントを参照してください。)
・関数リファレンス/get the terms
http://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_the_terms
利用中のテーマの「functions.php」に以下のコードを追加すると、ナビゲーションリンクのカテゴリー内限定に対応させる事が可能です。
※「Intuitive Custom Post Order」プラグインによる並べ替えのみ確認しました。
・「functions.php」
function where_re_override( $where, $in_same_term ) { if ( is_single() && $in_same_term == true ) { $taxonomy = 'category'; // ※タグまたはカスタムタクソノミーの場合は、ここを'post_tag'または'[タクソノミーのスラッグ]'に変更します。 $terms = get_the_category(); // $terms = get_the_terms( $post->id, $taxonomy ); // ※タグまたはカスタムタクソノミーに対応させる場合、上記の行の替わりに有効にします。 $where .= " AND tt.taxonomy = '" . $taxonomy . "' AND tt.term_id IN (" . $terms['0']->term_id . ")"; } return $where; } add_filter( 'get_previous_post_where', 'where_re_override', 10, 2); add_filter( 'get_next_post_where', 'where_re_override', 10, 2 );
※「$excluded_terms」による除外するカテゴリーの指定には対応していません。
※「$taxonomy」は「category」(カテゴリー)を指定していますが、タグやカスタムタクソノミー(※何れか1種類)に対応させる事も可能です。(上記コード内と次のドキュメントを参照してください。)
・関数リファレンス/get the terms
http://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_the_terms
気がついた事がありますので追記します。
カテゴリー限定(「$in_same_term」をtrue指定)した場合、「rel」属性の「link」タグに影響しますので、次の対処が必要になります。
以下のコードを「functions.php」に追加します。
function custom_rel_link() { if( is_single() ) { remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head' ); add_action( 'wp_head', 'adjacent_posts_rel_link_in_taxonomy' ); } } add_action( 'wp_head', 'custom_rel_link', 1 ); function adjacent_posts_rel_link_in_taxonomy() { adjacent_posts_rel_link( $title = '%title', true ); }
※個別投稿ページの場合、デフォルトのrelリンクタグを出力するアクションを削除して、カテゴリー限定のrelリンクタグを出力する関数を実行するアクションを追加し直しています。
※カテゴリー内限定「$in_same_term」だけでなく、除外カテゴリー「$excluded_terms」やタクソノミー指定「$taxonomy」にも対応するには、プラグインで対応してもらった方が便利ですので、サポートフォーラムでお願いしてみました。
対応してもらえるかは分かりませんが、
・$in_same_term,$excluded_terms,$taxonomyパラメータへの対応
https://wordpress.org/support/topic/in_same_termexcluded_termstaxonomy%e3%83%91%e3%83%a9%e3%83%a1%e3%83%bc%e3%82%bf%e3%81%b8%e3%81%ae%e5%af%be%e5%bf%9c
※プラグインで対応した場合には、回答内のコードによる対処は必要なくなりますが、relリンクタグに対処する為のコードは必要です。
※除外カテゴリー「$excluded_terms」やタクソノミー指定「$taxonomy」を指定した場合は、relリンクタグに対処する為のコードも変更が必要になります。
指定するパラメータの順番は次のとおりになります。(3番目に除外カテゴリー(ターム)のID、4番目にタクソノミーの種類をナビゲーションリンクを出力する関数での指定と同じように指定します。)
「/wp-includes/link-template.php」
/** * Display relational links for the posts adjacent to the current post. * * @since 2.8.0 * * @param string $title Optional. Link title format. * @param bool $in_same_term Optional. Whether link should be in a same taxonomy term. * @param array|string $excluded_terms Optional. Array or comma-separated list of excluded term IDs. * @param string $taxonomy Optional. Taxonomy, if $in_same_term is true. Default 'category'. */ function adjacent_posts_rel_link( $title = '%title', $in_same_term = false, $excluded_terms = '', $taxonomy = 'category' ) { echo get_adjacent_post_rel_link( $title, $in_same_term, $excluded_terms, true, $taxonomy ); echo get_adjacent_post_rel_link( $title, $in_same_term, $excluded_terms, false, $taxonomy ); }
ありがとうございます!
またよろしくお願いいたします。
気がついた事がありますので追記します。
カテゴリー限定(「$in_same_term」をtrue指定)した場合、「rel」属性の「link」タグに影響しますので、次の対処が必要になります。
以下のコードを「functions.php」に追加します。
※個別投稿ページの場合、デフォルトのrelリンクタグを出力するアクションを削除して、カテゴリー限定のrelリンクタグを出力する関数を実行するアクションを追加し直しています。
2015/06/17 06:29:39※カテゴリー内限定「$in_same_term」だけでなく、除外カテゴリー「$excluded_terms」やタクソノミー指定「$taxonomy」にも対応するには、プラグインで対応してもらった方が便利ですので、サポートフォーラムでお願いしてみました。
対応してもらえるかは分かりませんが、
・$in_same_term,$excluded_terms,$taxonomyパラメータへの対応
https://wordpress.org/support/topic/in_same_termexcluded_termstaxonomy%e3%83%91%e3%83%a9%e3%83%a1%e3%83%bc%e3%82%bf%e3%81%b8%e3%81%ae%e5%af%be%e5%bf%9c
※プラグインで対応した場合には、回答内のコードによる対処は必要なくなりますが、relリンクタグに対処する為のコードは必要です。
※除外カテゴリー「$excluded_terms」やタクソノミー指定「$taxonomy」を指定した場合は、relリンクタグに対処する為のコードも変更が必要になります。
指定するパラメータの順番は次のとおりになります。(3番目に除外カテゴリー(ターム)のID、4番目にタクソノミーの種類をナビゲーションリンクを出力する関数での指定と同じように指定します。)
「/wp-includes/link-template.php」
ありがとうございます!
2015/06/17 16:43:45またよろしくお願いいたします。