「最近の投稿」ウィジェットの日付を投稿からの経過日数に置き換える

このブログでは投稿の間隔が直感的にわかるよう、WordPressの「最近の投稿」ウィジェットで表示される日付を投稿からの経過時間に置き換えています。

recent posts tweak display

管理画面では元のウィジェットの項目に「投稿からの経過時間を表示」と「トップページでは非表示にする」チェックボックスを追加しています。後者は「うーん、トップの新着とウィジェットの新着で新着がダブってしまった」ということがあるので入れているおまけです。

recent posts tweak widget
もっと良い英語の表現をお持ちの方は@mayoibiまでお伝えください

コード

functions.phpに加えるコードをGistに置いています。

https://gist.github.com/modshrink/9988894

ウィジェット置き換えの仕組み

元の「最近の投稿」ウィジェットをウィジェット一覧から外し、

add_action( 'widgets_init', 'remove_recent_posts_widget' );
function remove_recent_posts_widget() {
	unregister_widget( 'WP_Widget_Recent_Posts' );
}

「最新の投稿」ウィジェットのクラスを継承して、新しいウィジェットとして登録します。

add_action( 'widgets_init', create_function( '', 'return register_widget( "WP_Widget_Recent_Posts_Time_Tweak" );' ) );

class WP_Widget_Recent_Posts_Time_Tweak extends WP_Widget_Recent_Posts {
	...
}

投稿からの経過時間はhuman_time_diff関数を使っています。日本語設定だと「3分前」「3週」などローカライズされた値が出力され、「%s ago」は翻訳ファイルに入っているので「前」に変換されます。

printf( __( '%s ago' ), human_time_diff( get_the_time( 'U' ) ) );

この程度だと元のクラスを丸コピして書き換えても大差ないのですが、独立させずに元のウィジェットの動きに依存させたいと思ったので継承にしました。

in Note