- 2009-02-14 (土) 20:00
- WP Plugin Hacks | wordpress
WordPress が過日2.7にバージョンアップして(今は既に2.7.1になっている)、当サイトを含め手持ちのサイトもバージョンアップしたのですが、コアファイルに手を入れていた部分が飛んでしまったのを機に、アプリケーションフックで対応できるものをプラグイン化して対処してみようという試み。
今回のターゲットは、前後へのリンクのアトリビュートです。テーマ中で言うなら posts_nav_link タグ付近です。
通常のリンク、ヘッダやフッタやサイドバーに出したいリンクはテーマファイル中で編集すれば好きなアクセスキーをセットすることができますね。
<h1><a href="<?php echo get_option('home'); ?>/"><?php bloginfo('name'); ?></a></h1>
これは
<h1><a href="<?php echo get_option('home'); ?>accesskey="0" /"><?php bloginfo('name'); ?></a></h1>
のようにすれば簡単にアクセスキーを追加できます。
ただ、投稿(POST)の前後へのナビゲーションリンクは、通常下記のようになっていて、同様の手段ではセットすることができませんでした。
<div class="navigation">
<div class="alignleft"><?php next_posts_link(__('« Older Entries', 'kubrick')) ?></div>
<div class="alignright"><?php previous_posts_link(__('Newer Entries »', 'kubrick')) ?></div>
</div>
や、
<?php posts_nav_link(' | ', 'Newer', 'Older'); ?>
などがありますが、いずれもアンカー中のアトリビュートは指定できませんでした。
簡単な回避策として、バージョン 2.6 までは、wp-includes/link-template.php 中の function next_posts_link / previous_posts_link を、下記のように修正することで対応していました。
function next_posts_link($label='Next Page »', $max_page=0) {
global $paged, $wp_query;
if ( !$max_page ) {
$max_page = $wp_query->max_num_pages;
}
if ( !$paged )
$paged = 1;
$nextpage = intval($paged) + 1;
if ( (! is_single()) && (empty($paged) || $nextpage <= $max_page) ) {
echo '<a href="';
next_posts($max_page);
echo '">'. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $label) .'</a>';
}
}
を、
function next_posts_link($label='Next Page »', $max_page=0) {
global $paged, $wp_query;
if ( !$max_page ) {
$max_page = $wp_query->max_num_pages;
}
if ( !$paged )
$paged = 1;
$nextpage = intval($paged) + 1;
if ( (! is_single()) && (empty($paged) || $nextpage <= $max_page) ) {
echo '<a href="';
next_posts($max_page);
echo '" accesskey="6">'. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $label) .'</a>';
}
}
このように修正していた。
これで問題なく携帯対応として(directkeyを指定しないの?とかそういうつっこみは抜きにして)問題なかったのですが、今回の 2.7 へのバージョンアップで、link-template.php に大幅な加筆変更が加えられたため、同じ対処をやめることにしました。
実は 2.7 へのバージョンアップにおいて、function get_next_posts_link / get_previous_posts_link が新しくなり、リンク生成時のアトリビュートを取得するためのアプリケーションフック(フィルター) next_posts_link_attributes / previous_posts_link_attributes が追加されました。
これにより、前述のようにコアファイルに手を加えなくてもフックでアトリビュートを追加できるようになったのです。
というわけで早速(遅い?w)プラグイン化してみました。
<?php
/*
Plugin Name: set AccessKey on Next6/Prev4
Description: 前後の投稿へのリンクにアクセスキーをセットする
Version: 1.0
Author: Y.Nishimura
Author URI: http://officel.biz/
*/
function filter_setAccesskeyN6($content) {
return $content . " accesskey='6'";
}
function filter_setAccesskeyP4($content) {
return $content . " accesskey='4'";
}
add_filter('next_posts_link_attributes', 'filter_setAccesskeyN6');
add_filter('previous_posts_link_attributes', 'filter_setAccesskeyP4');
?>
set-accesskey-on-n6-p4.phpをダウンロードして、plugin ディレクトリにアップロード後、有効化するだけで前後のPOSTリンクに accesskey が追加されます。見てのとおり、国内の携帯電話向けに、次へのリンクは”6″を、前へのリンクは”4″になっています。
個人的に必要だから作ったので、変更や修正には対応できないかもしれないかわりに、自由に配布・改変・私有化していただいて結構です。(個別にメンテする時間が取れないだけとも言います。)当サイトをご紹介いただいても、いただかなくても問題ありません。好きに使ってください。この投稿が誰かの何かの役に立てば幸いです。
追伸:新設されたフックを見ている限り、いたるところに追加が行われているので、これをベースにしていろいろ出来そうです。例えば投稿タイトルを title 要素として埋めるとか。いや、面倒か。。。
- Newer: [WPCH vol.04] RSSをハック。ちょっとした工夫で gmail の random signature に対応
- Older: [GAME]KONAMI の jubeat の称号リストをチートシート風にしてみた
Comments:0
Trackbacks:1
- Trackback URL for this entry
- http://officel.biz/wordpress/wordpress-plugin-hacks-vol01.htm/trackback
- Listed below are links to weblogs that reference
- [WPPH01]新しいフィルタフックw next_posts_link_attributes / previous_posts_link_attributes from Office L
- pingback from Office L ? [WPPH02]WP2.8系の新しいフック wp_headers (If you’re reading thisってやつ。 09-09-13 (日) 16:51
-
[...] addxheader.phpファイルをダウンロードして、書き換えて、pluginsディレクトリにアップロードして、管理画面から有効化すると使えます。前回同様自己責任でお好きなようにどうぞ。 This entry was posted on 日曜日, 9月 13th, 2009 and is filed under WP Plugin Hacks, wordpress. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site. « 企業サイトを研究するのに使ったサイトのまとめ+おまけ [...]