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 (複数指定可、指定したもの全てが挿入されます)
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};)/', '&$1', $next_label) ."</a></li>\n";
ここを修正して,次のページへのアンカタグに rel=”next”を追加してしまいます.
echo '" rel="next">'. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $next_label) ."</a></li>\n";
ついでに,関係ないですが,rel=”prev”も付けてしまいましょう^^
echo '>'. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $prev_label) ."</a></li>\n";
を修正して
echo '"rel="prev">'. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $prev_label) ."</a></li>\n";
としてしまいます.こちらは直接 Autopagerize には関係ないです.
これで,インデックスのページは Autopagerize が有効になりました.ただ,サイドバーとかが若干 変な挙動してるので,この辺は修正の余地ありですが,面倒なのでとりあえずこのまま orz