wp.Vicunaにはてなスターをつける&Autopagerizeに対応する

はてなスターはパーマリンクが必要だったり,タグを合わせてあげないといけないので,はてなのページで もらえるソースを貼っただけでは動きません.以下のサイトを参考にすればすぐできました.

具体的には,header.php に以下のリンクを追加.

<script type=”text/javascript” src=”http://s.hatena.ne.jp/js/HatenaStar.js”></script>
<script type=”text/javascript”>
Hatena.Star.Token = ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’;
</script>

あとはスターをつけたいやつで,タグに合わせてスクリプトを追加.追加場所はそれぞれの ファイルで,</head>の前にしておきました.今回は index.php には以下を追加.

<script type=”text/javascript”>
Hatena.Star.EntryLoader.headerTagAndClassName = [”h2″,null];
</script>

それから個別ページにも付くようにします.以下のエントリを参考にして,タイトルにアンカを つけないようにしつつ,はてなスターにはパーマリンクを教えました.

以下のソースを single.php の</head>より前に記述.

<script type=”text/javascript”>
Hatena.Star.EntryLoader.loadEntries = function() {
    var entry = new Hatena.Star.Entry.Vicuna(document.getElementsByTagName('h1')[0]);
    return [entry];
}
Hatena.Star.Entry.Vicuna = new Ten.Class({
    initialize: function(h1) {
        this.title = h1.firstChild.nodeValue;
        this.uri   = '<?php echo get_permalink() ?>';
        this.comment_container = Hatena.Star.EntryLoader.createCommentContainer();
        h1.appendChild(this.comment_container);
        this.star_container = Hatena.Star.EntryLoader.createStarContainer();
        h1.appendChild(this.star_container);
    }
});
</script>

Autopagerize に対応させる

個別ページはなんかいまいちうまくいかなかったので,インデックスの方だけ.参考にしたのは 以下のエントリです.

ただ,このエントリは MT 向けの様で,微妙に違ってたので僕がやったことを書きます. Autopagerize に対応させるには,以下の 3 つの要素が必要なようです.

埋め込みの形式は以下の通りです

  • link 要素または a 要素で rel=”next” (複数あった場合は、先に現れるものが選ばれます)
  • class で autopagerize_insert_before (複数あった場合は、先に現れるものが選ばれます)
  • class で autopagerize_page_element (複数指定可、指定したもの全てが挿入されます)

AutoPagerize0.0.11 – SWDYH

page_element

index.php の<div id="main">に class=”autopagerize_page_element”を追加.

insert_before

index.php の下の方にある<p class="topicPath">に class=”autopagerize_insert_before”を追加.

next

これは別ファイルの関数が呼ばれているのでそっちをハック.functions.php の中の function vicuna_paging_link()を探します.その中の以下を修正.

echo '>'. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&#038;$1', $next_label) ."</a></li>\n";

ここを修正して,次のページへのアンカタグに rel=”next”を追加してしまいます.

echo '" rel="next">'. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&#038;$1', $next_label) ."</a></li>\n";

ついでに,関係ないですが,rel=”prev”も付けてしまいましょう^^

echo '>'. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&#038;$1', $prev_label) ."</a></li>\n";

を修正して

echo '"rel="prev">'. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&#038;$1', $prev_label) ."</a></li>\n";

としてしまいます.こちらは直接 Autopagerize には関係ないです.

これで,インデックスのページは Autopagerize が有効になりました.ただ,サイドバーとかが若干 変な挙動してるので,この辺は修正の余地ありですが,面倒なのでとりあえずこのまま orz