WordPress.org

日本語

サポート

サポート » 使い方全般 » next_post_link:特定カテゴリーの除外について

next_post_link:特定カテゴリーの除外について

  • 解決済 ShelteringBliss

    @shelteringbliss

    個別記事で次(前)へのリンクを表示するテンプレートタグnext_post_link(previous_post_link)について質問させてください。

    WordPressCodexにあった「同一カテゴリー内で、特定のカテゴリーを除外する」という使い方をしたいのですが、うまく反映されません。

    【前提】
    3つのカテゴリ「A」「B」「C」を作り
    記事1と記事3にカテゴリ「A」と「C」を、記事2にカテゴリ「B」と「C」を設定しました。

    【やりたいこと】
    記事1からのnext_post_linkは同一カテゴリ「A」に属する記事3へ繋げたい。
    (カテゴリ「A」に属さない記事2にリンクはしないようにしたい)

    【試したこと】
    <?php next_post_link('%link', '%title',true,'BのカテゴリID'); ?>
    <?php next_post_link('%link', '%title',true,'CのカテゴリID'); ?>
    <?php next_post_link('%link', '%title',true,'BのカテゴリID and CのカテゴリID'); ?>
    いずれも除外カテゴリ設定が適用されず、記事1から記事2へリンクされてしまいます。

    同一カテゴリ「A」のみで次(前)へのリンクを繋げるようにするにはどうすれば良いのでしょうか。
    ご教示の程よろしくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • include しているカテゴリーは exclude で指定したカテゴリーから取り除かれてしまいます。
    wp-includes/link-template.php 944行目
    $excluded_categories = array_diff($excluded_categories, $cat_array);

    なので、除外カテゴリーは指定せずに単一のカテゴリーをフィルタで指定するとうまく行く気がします(未検証)。
    functions.php に以下を追加:

    function my_post_join($join, $in_same_cat, $excluded_categories){
      return preg_replace(
        '/IN \(.+?\)/',
        'IN (AのカテゴリID)',
        $join
      );
    }

    リンク出力箇所:

    add_filter('get_next_post_join', 'my_post_join', 10, 3);
    next_post_link('%link', '%title',true);
    remove_filter('get_next_post_join', 'my_post_join', 10, 3);

    previous の場合:

    add_filter('get_previous_post_join', 'my_post_join', 10, 3);
    previous_post_link('%link', '%title',true);
    remove_filter('get_previous_post_join', 'my_post_join', 10, 3);

    未検証なので細かいことはよきにはからってください。

    丁寧な解説ありがとうございます。
    希望通りのリンク出力が出来ました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「next_post_link:特定カテゴリーの除外について」への新規返信追加は締め切られています。
ツールバーへスキップ