ブログ革命(プチ)2のものを、プラグイン化できましたヽ(・∀・)ノ よくやった俺

JustListと命名
JustListプラグインを使用することで、WordPressに「指定記事を含む各種リストのページへ飛べる」機能を追加できます。例えば、検索エンジン等から単体記事に辿り着いたとします。前後の記事も見たくなりますよね?しかし、標準機能では前後1記事ずつしか辿れません。「リスト」には飛べないのです。
ソース
これでコアファイルを書き換える必要がなくなったぞ(*゚∀゚)=3
wordpress2.6でしか確認しておりませんが、多分2.5.1でも動くと思います。
※追記2.6.1も無変更で動きました
<?php
/*
Plugin Name: JustList
Plugin URI: http://www.denkasi.com/blog/
Feed URI: http://www.denkasi.com/blog/
Description: 指定記事を含むリストを表示します。
Version: 0.0
Author: toaruR
Author URI: http://www.denkasi.com/blog/
*/
$pagewith_where;
$pagewith_join;
function pagewith_posts_where_request($where) {
global $pagewith_where;
$pagewith_where = $where;
return $where;
}
function pagewith_posts_join_request($join) {
global $pagewith_join;
$pagewith_join = $join;
return $join;
}
function pagewith_post_limits_request($limits) {
global $wpdb,$paged,$pagewith_where,$pagewith_join;
if (!$_GET['paged']) {
$pagewith = ereg_replace('[^0-9]+','',$_GET['pagewith']); //ごみを取る
if ($pagewith) {
$pagewithby = "AND wp_posts.ID>$pagewith";
$postCounter = (int) $wpd-->get_var("SELECT COUNT(*) FROM $wpdb->posts $pagewith_join WHERE 1=1 $pagewith_where $pagewithby");
//$paged $limit作り直し
$posts_per_page = get_option('posts_per_page');
$paged = floor( $postCounter / $posts_per_page ) + 1;
$pgstrt = ($paged -1) * $posts_per_page;
set_query_var('paged',$paged);
$limits = 'LIMIT '.$pgstrt.','.$posts_per_page;
}
}
return $limits;
}
add_action('posts_where_request','pagewith_posts_where_request');
add_action('posts_join_request','pagewith_posts_join_request');
add_action('post_limits_request','pagewith_post_limits_request');
/* pagewith リンクの調整 */
function pagewith_remove_pagenum_link($result) {
$result = preg_replace('/(\?|\&)pagewith=\d*/','',$result);
$result = str_replace('/&','/?',$result);
return $result;
}
add_action('get_pagenum_link','pagewith_remove_pagenum_link');
?>
課題
まだ、そのリストへのリンクを楽に取得できるタグを作っておりません。
従って、実装はスキン(たとえば single.php)に
<?php bloginfo(‘url’); ?>/?pagewith=<?php the_ID(); ?>#post-<?php the_ID(); ?>”>[全体]</a>
等と記述せねばなりません。
また、URLが orderby=rand 等の引数を持つ場合は無効となります。
使用例
今回の拡張で、リストURLに「pagewith=ポストID」を付加することで、ポストIDの記事を含むページが自動的に選択されます。
たとえば、本ブログの87番記事の場合。(なお、この記事への通常のリンクは http://www.denkasi.com/blog/?p=87 です。)
全時系列リストの87番記事を含むページへは
http://www.denkasi.com/blog/?pagewith=87#post-87
との記述になり、(本記事を書いている現在は)8ページ目へ飛びます。
同カテゴリリストの87番記事を含むページへは
http://www.denkasi.com/blog/?cat=20&pagewith=87#post-87
との記述になり、4ページ目へ飛びます。
2008年5月のアーカイブリストの87番記事を含むページへは
http://www.denkasi.com/blog/?m=200805&pagewith=87#post-87
との記述になり、2ページ目へ飛びます。
語句’IE’で検索した結果リストの87番記事を含むページへは
http://www.denkasi.com/blog/?s=IE&pagewith=87#post-87
との記述になり、2ページ目へ飛びます。
実装はテーマ(スキン)次第となりますが、87番記事単体ページに、色々付加することで、直感的なナビゲーションが構築できるはずです。
※Macだと(FireFox3、Safari3で確認)パーマリンクを設定している場合 #post-87 の部分がキャンセルされてしまうようです。