ワードプレスのページ遷移でtrueを入れても同一カテゴリー内でページ遷移しません。


<?php previous_post_link('&laquo; %link','%title',TRUE) ?>
<?php next_post_link('%link &raquo;','%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','&lt; %title',true); ?></span><span id="newpage"><?php next_post_link('%link','%title &gt;',true); ?></span>
</p>

上記テンプレートの切り替えが影響しているのでしょうか?

よろしくお願いいたします。

回答の条件
  • 1人20回まで
  • 登録:
  • 終了:2015/06/12 13:42:44
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:kamefactory

補足です。

きちんとカテゴリー毎にページ遷移ができている他のテーマで試したところ、やはりカテゴリーに関係なくページ遷移してしまいます。

ということはテーマが問題ではなく、投稿方法やカテゴリー設定方法に問題があるのでしょうか?それぞれSLUGを付けてカテゴリーを作成しており、投稿時に属したいカテゴリーを選択して投稿しているだけなのですが…。

可能性の部分も含め、わかる方がいらっしゃいましたら教えてください。

ベストアンサー

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

ポイント200pt

利用中のテーマの「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

他1件のコメントを見る
id:rouge_2008

気がついた事がありますので追記します。

カテゴリー限定(「$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 );
}
2015/06/17 06:29:39
id:kamefactory

ありがとうございます!
またよろしくお願いいたします。

2015/06/17 16:43:45

その他の回答0件)

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351ここでベストアンサー

ポイント200pt

利用中のテーマの「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

他1件のコメントを見る
id:rouge_2008

気がついた事がありますので追記します。

カテゴリー限定(「$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 );
}
2015/06/17 06:29:39
id:kamefactory

ありがとうございます!
またよろしくお願いいたします。

2015/06/17 16:43:45
  • id:rouge_2008
    すべての投稿でカテゴリー関係なくリンクされるのでしょうか?
    正常に動作しない投稿に複数のカテゴリーが指定されていないか確認してみてください。
  • id:kamefactory
    すべての投稿でカテゴリーに関係なくリンクされます。
    複数カテゴリーも指定しておりません。
    同じタグが設定してある投稿もありますが、設定されていないページも関係なく遷移します。

    よろしくお願いします。
  • id:rouge_2008
    質問にあるコードで特に問題なく動作するようです。
    WordPressのバージョンはいくつでしょう?
    動作環境は満たしているでしょうか?

    ・ WordPress 日本語
    http://ja.wordpress.org/
    -----------------------------------------------------------
    WordPress 日本語版の動作環境

    PHP バージョン 5.2.4 以上 (PHP 5.4 以上推奨)
    MySQL バージョン 5.0 以上 (MySQL 5.5 以上推奨)
    プラグインやテーマによっては、上記バージョンでは動作しないものも確認されています。事前にご利用予定のプラグインやテーマとサーバー環境の互換性をご確認ください。また、3.1 以前の旧バージョンの動作環境については、サーバ要件ドキュメンテーションをご覧ください。
    -----------------------------------------------------------


    > きちんとカテゴリー毎にページ遷移ができている他のテーマで試したところ、やはりカテゴリーに関係なくページ遷移してしまいます。

    カテゴリーごとにページ遷移できている事は、どのような方法で確認したのでしょう?
    WordPressに同梱されている公式テーマ「Twenty Fifteen」や「Twenty Thirteen」でも動作しませんか?
    「single.php」にナビゲーションタグのカテゴリー内限定をtrue指定で追加して試してみてください。(テーマデフォルトのナビゲーション用のコードの直前または直後がいいと思います。)

    previous_post_link( '%link', '<span class="meta-nav">&laquo;&nbsp;Previous Post</span>%title', true );
    next_post_link( '%link', '<span class="meta-nav">Next Post&nbsp;&raquo;</span>%title', true );
  • id:kamefactory
    ありがとうございます。

    PHP5.3.3
    MySQL5.0

    ワードプレスは最新版4.2.2です。

    公式テーマでもtrueを付けて確認しましたが、やはりカテゴリーに関係なく遷移してしまいます。

    よろしくお願いします。
  • id:rouge_2008
    公式テーマで、追加したナビゲーションタグ以外はカスタマイズしていない状態で確認したのですね?
    一応、プラグインをすべて停止した状態でも試してみてください。
  • id:kamefactory
    ありがとうございます!

    Intuitive Custom Post Orderというプラグインを停止したら正常に動きました!
    本当にありがとうございます!

    ちなみにこのプラグインは投稿記事の順番を変更できるプラグインなんですけど、カテゴリー内ページ遷移が可能な投稿記事の順番を変更できるプラグインをご存知でしたら教えてくださいませ。

    よろしくお願いいたします。
  • id:rouge_2008
    プラグインには心当たりがありませんので、「Intuitive Custom Post Order」プラグインで対処する方法を回答として投稿しました。
    動作の確認お願いします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません