モバイルデバイス経由でのサイトへのアクセスが増えてきたことや、WordPress標準のテーマがシングルカラムになったこともあってか、最近のWordPressで運営されているサイトはサイドバーを持たないものが増えてきたように思います。
現在このサイトは右サイドバーを持たせた構造になっているものの、流行に乗って?シングルカラムへ変更すべく独自のブロックテーマを作りつつあり、このページをご覧いただく頃にはひょっとするとサイドバーのないページになっているかも知れません。
ページのシングルカラム化で懸念材料になるのが、サイドバーに配置していた「検索窓」や「関連投稿」「カテゴリー一覧」「タグ一覧」などの扱い。
これらを本文下へすべて配置してしまうと、2カラム時代のモバイル表示のように、本文の下にダラダラとコンテンツが並ぶ形になり、恐らくそれらを見られることもなく離脱されてしまうのがオチかも知れませんし、パソコン表示でも同じ形になってしまうので、あまり格好いいものではありませんね。
そこで、タグクラウドやタグ一覧の代わりに、タグとして登録した文字列と同じ文字列が本文内にあった場合に、自動でタグアーカイブ(タグに紐づくページの一覧)へリンクを張るようにすれば、ページ内の余分なコンテンツを削減でき、かつ、WordPressの利点である内部リンク施策にも役立つのではと考えて作成した以下のコードを、誰かの役に立てばと思い、公開しておきます。
function pwcn_auto_link_post_tags($content) {
//モードと参照数の指定
$mode = ''; // '1' でこの記事のタグ、空白で人気のタグ
$tag_limit = 50; //人気のタグの場合の取得上限数
// 対象にする投稿タイプを指定(1つなら文字列、複数なら配列)
$posttypes = array('post');
if (is_singular( $posttypes ) && is_main_query()) {
$tags = array();
// モード判定
if ( isset($mode) && $mode === '1') {
// パターンA: この記事に設定されているタグだけを取得
$tags = get_the_tags();
} else {
// パターンB: サイト全体のタグから、投稿数が多い順に指定件数を取得
$tags = get_tags(array(
'hide_empty' => false,
'number' => $tag_limit,
'orderby' => 'count',
'order' => 'DESC',
));
}
// 自動リンク処理
if (!empty($tags) && !is_wp_error($tags)) {
foreach ($tags as $tag) {
$tag_name = preg_quote($tag->name, '/');
$tag_link = get_tag_link($tag->term_id);
$pattern = '/(?!(?:[^<]+>|[^>]*<\/a>))(' . $tag_name . ')/u';
$replace = '<a href="' . esc_url($tag_link) . '" class="auto-tag-link">${1}</a>';
$content = preg_replace($pattern, $replace, $content);
}
}
}
return $content;
}
add_filter('the_content', 'pwcn_auto_link_post_tags');
上記のコードを有効化しているテーマのfunctions.phpへ追加すればすぐに機能します。結構短いコードで実装できます。
このコードでは以下の部分を設定することで、動作の調整ができるようにしています。
1つはサイトに登録されているすべてのタグを自動リンクの対象とするのか、または、そのページに紐づけているタグだけを対象とするのかの設定です。
以下の部分で調整できます。
//モードと参照数の指定
$mode = ''; // '1' でこの記事のタグ、空白で人気のタグ
$tag_limit = 50; //人気のタグの場合の取得上限数
$modeの部分をサンプルコードのまま空にすればサイトに登録されているすべてのタグのうち、よりたくさんのページに紐づく$tag_limitに指定した数だけ抽出し、リンク対象とするようにできます。あまりにも登録されている数が多いと、自動リンクを張る判断が多くなり、ページの表示速度に支障が出る可能性がありますので、サンプルコードでは上位50件の登録済タグを対象にしています。
また$modeの値を1に設定すれば、その投稿を紐づけているタグの文字列を対象としますので、ページ表示速度への影響はほとんどゼロになりますが、自動リンクの対象となる文字列は限られることになります。
もう1つは投稿タイプの指定です。サンプルコードでは以下のように書いています。
// 対象にする投稿タイプを指定(1つなら文字列、複数なら配列)
$posttypes = array('post');
もしも投稿を分類するためにカスタム投稿タイプを追加していて、その投稿タイプにもWordPress標準のタグを紐づけている場合には、その投稿タイプのページも自動リンクの対象とすることができます。
リンククリック時のタグアーカイブページの対象となる投稿タイプは標準では「投稿」のみを対象としていますので、タグアーカイブに表示する投稿タイプの調整も別途必要になります
これでWordPressのタグクラウドや紐づくタグの一覧などを表示させる必要がなくなりますので、ページがすっきりしますね。











コメントを残す