WordPressでフックを使ってウィジェットのアーカイブの出力をカスタマイズする

WordPressでフックを使ってウィジェットのアーカイブの出力をカスタマイズする

WordPressでフックを使ってウィジェットのアーカイブの出力をカスタマイズする方法もご紹介します。

デフォルトでは月別のアーカイブになっており、最大出力数の制限もできないのでフックを使って処理します。

  
この記事は2年以上前に書かれたものです。
情報が古い可能性があります。

photo credit: itselea via photopin cc

検証バージョン

  • WordPress 3.5.2

functions.phpに記述するコード

<?php
add_filter( 'widget_archives_args', 'hook_widget_archives_args' );
function hook_widget_archives_args( $args ) {
	
	// デフォルトの月別(type=monthly)から年別のアーカイブに変更
	$args['type'] = 'yearly';

	// 最大出力件数を5件までに制限
	$args['limit'] = 5;
	
	return $args;
}

指定する引数はwp get archivesを参考にされてみてください。

ただしウィジェットのオプションで ドロップダウン表示 にチェックが入っていると上手く適用されないようでした。その場合、widget_archives_dropdown_argsフックがあるのでそちらも使いましょう。

ドロップダウン表示にも対応する

<?php
add_filter( 'widget_archives_args', 'hook_widget_archives_args' );
add_filter( 'widget_archives_dropdown_args', 'hook_widget_archives_args' );
function hook_widget_archives_args( $args ) {
	
	// デフォルトの月別(type=monthly)から年別のアーカイブに変更
	$args['type'] = 'yearly';

	// 最大出力件数を5件までに制限
	$args['limit'] = 5;
	return $args;
}

上記のような記述をfunctions.phpに行うと ドロップダウン表示 にチェックを入れたアーカイブも年別のアーカイブになりましたが、 ドロップダウンの初期表示が 月を選択 という文字列のままです。

ドロップダウンの「月を選択」という文字列を変更する

<?php
add_filter( 'widget_archives_args', 'hook_widget_archives_args' );
add_filter( 'widget_archives_dropdown_args', 'hook_widget_archives_args' );
function hook_widget_archives_args( $args ) {
	
	// デフォルトの月別(type=monthly)から年別のアーカイブに変更
	$args['type'] = 'yearly';

	// 最大出力件数を5件までに制限
	$args['limit'] = 5;
	
	return $args;
}

add_filter( 'gettext', 'hook_gettext', 10, 3 );
function hook_gettext( $translated_text, $text, $domain ) {

	// ドロップダウンの文字列「月を選択」を「年を選択」に変更する
	switch ( $translated_text ) {
		case '月を選択' :
			$translated_text = '年を選択';
			break;
	}
	return $translated_text;
}

上記は wp-content/languages/ja.po を変更せずにシステムで使用されている文字列を置換する方法です。

#: wp-includes/default-widgets.php:252
msgid "Select Month"
msgstr "月を選択"

注意点

gettext というフックを通っている文字列の中から文字列を判別し 月を選択 であれば 年を選択 に変更しています。

wp-includes\default-widgets.php の252行目で Select Month というキーで 月を選択
に翻訳されているのでこれを置換しています。

一応調べてみたところ Select Month は一箇所しか使われていなかったので今回はこういう記述をしてみましたが他にもこのフックの対象になる文字列があれば置換されてしまうので良いやり方ではない気がします。

参考記事

  

共有やブックマークなど