[WordPress] サイドバーに経過日数を表示する

WordPress で指定日からの経過日数を表示したくなった。そういうことができるプラグインがパッと見つからなかったので、プラグインを使わない方法に挑戦してみた。

それはウィジェット上で PHP コードを使えば実現できる。

(1)DateCounter.php という以下のようなファイルを作成する。

<?php
//指定日
$date="2019/04/01";
date_default_timezone_set("Asia/Tokyo");
//日数表示
echo '今日は 2019/4/1 から数えて ';
echo ceil((time() - strtotime($date))/(24*60*60));
echo ' 日目です。';

(2)現在のテーマの functions.php に以下を追記する( <?php 〜 ?> の間に追記する)。

{
add_filter( 'widget_text', function( $ret ) {
	$php_file = 'DateCounter';

	if( strpos( $ret, '[' . $php_file . ']' ) !== false ) {
		add_shortcode( $php_file, function() use ( $php_file ) {
			get_template_part( $php_file );
		});

		ob_start();
		do_shortcode( '[' . $php_file . ']' );
		$ret = ob_get_clean();
	}

	return $ret;
}, 99 );
}

(3)1と2のファイルを /wp-content/themes/[現在のテーマ] へアップロードする。

(4)「テキスト」ウィジェットを追加し、[DateCounter] というショートコードを入力、保存。

これでサイトバーに経過日数が表示されるようになった。

参考:
経過日数を表示する方法
https://imakat.com/2016/08/17/3549/

WordPress でプラグイン使わずにウィジェットで PHP コード動かす | Thought is free
https://thk.kanzae.net/net/wordpress/t6358/

ウィジェットでphpを呼び出したい!ショートコードを設定してphpを読み込ませる方法! | 知りたいねっと
https://shiritai.net/widget-shortcode/