誕生日を入力すると、そこから現在までの日数を計算して、現在の年齢を表示するというショートコードはたくさん紹介されていますね。
ただ、そのショートコードではあくまでも誕生から現在までの期間なので、メンテナンスを怠るといつの間にかあり得ない数字になってしまうこともあり、都合が悪いこともあるでしょう。
そこで今回は、誕生日と共に没日を指定することで、没日が入っている場合はそこまでの年齢を表示させるという機能を付加したショートコードのコード例を紹介します。
本ページ掲載のコードを使用するときは
本ページで掲載しているコードは、以下に了承した上で使用ください
- コードは商用・非商用問わず自由に使っていただいて構いませんが、コード追加による不具合やトラブルが発生しても当方では一切責任を負いません
- コードは有効化しているテーマのfunctions.php、style.cssなどへ追加することで機能します。それらのファイルへの変更を行うことに不安のある方は使用しないでください
- コードは本ページの公開日時点で私の環境において動作したものです。WordPressバージョン他環境の違いによって動作しないことがあります
- コードは、セキュリティ、コードの正確さなどにおいて完全なものではありません。中には紹介するコードを簡略化するために省略している部分があるものもありますので、ご自身でコードを十分に検証し、必要な部分の編集を行った上で使用するようにしてください
- 掲載しているのは参考コードです。自身の環境に合わせるための編集はご自身で対応いただく必要があります(コメント欄等から質問いただいても基本回答は致しません)
- 掲載しているコードの転載を禁じます(SNSで紹介いただいたり、本ページへのリンクを張っていただくことは大歓迎です)
年齢を自動計算して表示するショートコードの参考コード
以下を有効化しているテーマの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タグで出力させています。文章の途中にショートコードを入れればそのままインラインで(改行などなしで)表示できるようにしています。
コードの内容を見て、文字列の変更などは自由におこなってください。
コメントを残す