link rel="next/prev" href="url"

HTMLのヘッダ部分にナビゲーションがついていると思ったらついていなかった。WordPressはナビゲーションつかないのか。カテゴリやタグのリンクはつくんだけどな。

Firefoxだとlink widgetsという拡張があって、ナビゲーションリンクを検出してブラウズに役立てることができる。意外と便利です。この拡張、昔は下のステータスバーについたんだけど、今は上のツールバーのwidgetとしてレイアウトできるようになった。

それで、WordPressのプラグインディレクトリを探してみたんだけど、探し方が悪いのか見つからない。内容は非常に簡単なので自分で書いてみた。こんな感じかな。

<?php
/*
Plugin Name: nextlink
Plugin URI: https://wtnb.mydns.jp/wordpress/archives/4478
Description: add link rel prev/next
Version: 0.1
License: GPL
Author: Watanabe Takashi
Author URI: https://wtnb.mydns.jp/wordpress/
*/

function nextlink_get($url, $reltype, $title){
  if($title){
    return "<link rel=\"{$reltype}\" href=\"${url}\" title=\"{$title}\" />";
  }
  return "<link rel=\"{$reltype}\" href=\"${url}\" />";
}

function nextlink_add(){
  $post = get_previous_post();
  if($post){
    echo nextlink_get(get_permalink($post), "prev", $post->post_title) . "\n";
  }
  $post = get_next_post();
  if($post){
    echo nextlink_get(get_permalink($post), "next", $post->post_title) . "\n";
  }
}

add_action('wp_head', 'nextlink_add');
?>

wp-content/pluginsに放り込んで、管理画面からnextlinkプラグインを有効にすると使われるようになります。

分からずに書いているのは危ないのですが、

  • titleはget_previous/next_post()->post_titleの段階でhtmlspecialchars()されているような値が戻ってきている(たとえば「…」は「&hellip;」になっている)。最初はsanitize_title()をかませたが、これだととurlencodeされてしまう。そのままechoするのでいいのか?
  • hrefはget_permalink()の戻り値についてはどうか。とりあえず私のURL構造だと大丈夫っぽい。
  • 設計を考えるとそのままタグの属性の値に使える文字列が戻ってくるのが適切だという印象はないです

まあ、問題があったら直します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です