WordPressではhead要素に隣接する記事の<link rel="next">
や<link rel="prev">
がデフォルトで出力される(まともなテーマなら)。これらのLINK要素は隣接する前後の記事やページネーションされた記事を参照させるために存在するのだが、このLINK要素を同じカテゴリに限定させることが出来ない。一応、要素を出力する関数に引数を渡せばできるのだが、その関数を呼び出すコードがハードコードされているので結局はマニュアルで対応させなければならない。
動作としては既に存在する関数を引数を追加して呼び出すだけ、と簡単。なのでプラグインが存在していそうだと思い検索してみたが、adjacentとかsame category linkとかで検索してもそれっぽいものが見つからない。絶対にありそうだが、正しい検索ワードがわからないから困った。それで結局、自分で書いた。悲しい。ぴえん🥺。いや、使い方わからんわ。
<?php
/*
Plugin Name: Same category adjacent posts link in head
Description: WordPressの単一記事ヘッダ内の隣接記事Linkを同じカテゴリに限定させるplugin
Version: 1.0.0
Auther: Aquei
Author URI: https://blog.srytk.com/aquei/
License: CC0
*/
namespace wordpress\plugin\samecategory;
function samecat(){
if(! is_single() || is_attachment() || has_action('wp_head', 'adjacent_posts_rel_link_wp_head') === False){
return;
}
//デフォルトのフックを削除
$result = remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10);
//変わりのフックを追加
if($result){
add_action('wp_head', __NAMESPACE__ . '\\samecat_cb');
}
}
function samecat_cb(){
adjacent_posts_rel_link('%title', True);
}
add_action('wp', __NAMESPACE__ . '\\samecat');
とりあえず期待通りの動作になった。最初、条件分岐タグが使えるのは WordPress の posts_selection アクションフックの後のみ
だとしらなくてちょっと詰まった。ぴえん🥺。二回目!!!