Personal WP Customization Notes (PWCN)

WordPressで実際に行ったカスタマイズの記録、発生した問題への対処時のメモ、ブロックテーマのカスタマイズなど

誕生日、現在の年齢、没日、没年齢を柔軟に表示するショートコードの作り方

誕生日を入力すると、そこから現在までの日数を計算して、現在の年齢を表示するというショートコードはたくさん紹介されていますね。

ただ、そのショートコードではあくまでも誕生から現在までの期間なので、メンテナンスを怠るといつの間にかあり得ない数字になってしまうこともあり、都合が悪いこともあるでしょう。

そこで今回は、誕生日と共に没日を指定することで、没日が入っている場合はそこまでの年齢を表示させるという機能を付加したショートコードのコード例を紹介します。

年齢を自動計算して表示するショートコードの参考コード

以下を有効化しているテーマのfunctions.phpへ追加します。

/***** 年齢表示ショートコード *****/
function pwcn_calculate_age_or_difference_shortcode($atts) {
// ショートコードの引数を取得
	$atts = shortcode_atts(
		array(
			'birthday' => '', // 誕生日
			'dead_day' => '', // 死亡日
			'show_birthday' => 'yes', // 日付を表示する
			'show_months' => 'yes', // 月を表示する
		), $atts);

//デフォルト値の設定
	// 日付を表示する
		if (empty( $atts['show_birthday'] )) {
			$atts['show_birthday'] = 'yes';
		}

	// 月を表示する
		if (empty( $atts['show_months'] )) {
			$atts['show_months'] = 'yes';
		}


// 生年月日が指定されていない場合は空文字を返す
	if (empty($atts['birthday'])) {
		return '';
	}


// 生年月日をDateTimeオブジェクトに変換
	$birthday = DateTime::createFromFormat('Ymd', $atts['birthday']);
	if (!$birthday || $birthday->format('Ymd') !== $atts['birthday']) {
		return '';
	}

// 誕生日の生成
	$formatted_birthday = date_i18n(get_option('date_format'), $birthday->getTimestamp());

// 文字列を変数化
	$year_text = __('歳','');
	$year_text_b = __('歳-','');
	$month_text_b = __('カ月-','');
	$birth_text = __('誕生日:','');
	$dead_text = __('没日:','');

//コンテンツの出力
	if(!empty($atts['dead_day'])) {//没日が入力されている時
		$deadday = DateTime::createFromFormat('Ymd', $atts['dead_day']);
        
		// 死亡日が無効な場合のチェック
			if (!$deadday || $deadday->format('Ymd') !== $atts['dead_day']) {
				return '';
			}

		// 誕生日の生成
			$formatted_deadday = date_i18n(get_option('date_format'), $deadday->getTimestamp());

		// 死亡日までの年月を計算
			$difference = $deadday->diff($birthday);
			$deadyears = $difference->y;
			$deadmonths = $difference->m;

		// 出力するコンテンツをまとめる
		//月表示・誕生日表示パラメーターにより内容を分岐
		if($atts['show_months'] == 'no'){
			$content_age = '-'.$deadyears.$year_text_b;
		}else{
			$content_age = '-'.$deadyears.$year_text.$deadmonths.$month_text_b;
		}

		if($atts['show_birthday'] == 'no'){
			$birthday_content = '';
		}else{
			$birthday_content = $birth_text.$formatted_birthday.' / ';
		}

			$content = '';
			$content .= '<span>';
			$content .= $birthday_content;
			$content .= $dead_text;
			$content .= $formatted_deadday;
			$content .= $content_age;
			$content .= '</span>';

	} else {//没日が入力されていない時

		// 現在の日付を取得
			$now = new DateTime();

		// 年齢を計算
			$age = $now->diff($birthday);
			$years = $age->y;
			$months = $age->m;

		//月表示・誕生日表示パラメーターにより内容を分岐
		if($atts['show_months'] == 'no'){
			$content_age = '-'.$years.$year_text_b;
		}else{
			$content_age = '-'.$years.$year_text.$months.$month_text_b;
		}

		if($atts['show_birthday'] == 'no'){
			$birthday_content = '';
		}else{
			$birthday_content = $birth_text.$formatted_birthday;
		}

		// 出力するコンテンツをまとめる
			$content = '';
			$content .= '<span>';
			$content .= $birthday_content;
			$content .= $content_age;
			$content .= '</span>';
	}

	//コンテンツを返す
	return $content;
}
add_shortcode('pwcn-calculate-age', 'pwcn_calculate_age_or_difference_shortcode');

そして、投稿や固定ページへ以下のショートコードを挿入し、必要なパラメーターを指定します。

[pwcn-calculate-age birthday="" dead_day="" show_birthday="" show_months=""]

以下が各パラメーターの設定内容と効果です。

パラメーター説明未設定の場合の値
birthday誕生日をyyyymmddで入力します何も表示しません
dead_day没日をyyyymmddで入力します入力されていれば没日と没年齢を表示します
show_birthday「no」と指定すると誕生日を表示せず年齢のみを表示しますyes
show_months「no」と指定すると「〇カ月」を表示せず歳のみを表示しますyes

コードではspanタグで出力させています。文章の途中にショートコードを入れればそのままインラインで(改行などなしで)表示できるようにしています。

コードの内容を見て、文字列の変更などは自由におこなってください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

※リンクやURLの挿入されているコメントは無視します