2018年4月24日火曜日

Wordpressの月別アーカイブウィジェットの月を強引に2桁表示にする

Wordpressのアーカイブウィジェット(投稿の月別アーカイブ)は「1~9月」を一桁で表示するのでずらっと並べるとそのぶんちょっとガタガタになってしまう。
なのでどの月も二桁になるようにしたいのだけどその方法がない。ウィジェットのオプションにはないし、Wordpressのフィルターとかでも制御できない。

Wordpressの関数にwp_get_archives()があってアーカイブのリンクを表示するという意味では同じ機能だ。これで出力を文字列で受け取って文字列置換で強引に二桁にするとことができる。

$my_archive_list = wp_get_archives(array('echo' => 0));
$my_archive_list = preg_replace('/年(\d)月/', '年0${1}月', $my_archive_list);

ただ、それで実際に表示させようとするとsidebar.phpに記述することになり、ウィジェットをドラッグアンドドロップで並び替えるというせっかくの仕組みから外れてしまう。

ちょっと半分あきらめ、半分未練がある状態のときに自作ウィジェットを追加できることを知った。そうだった。投稿タイプを追加できるようにウィジェットもまた追加できる。Wordpressならそれぐらい出来てもおかしくないと気づくのが遅かった。

とはいえウィジェットを追加するにはハードルが高いんじゃないか、と思っていたけどクラスを継承して必要なところだけ記述ればいいこともわかった。

class my_archive_widget extends WP_Widget {
    function __construct() {
        // 省略
    }

    function widget($args, $instance) {
        // 省略
    }

    function update($new_instance, $old_instance) {
        // 省略
    }

    function form($instance) {
        // 省略
    }
}
add_action('widgets_list',
    function(){return register_widget('my_archive_list');}
);

これをプラグインディレクトリに置いて有効化して使っている。