この記事で紹介しているショートコードを、アラサーなども表示できるようにした改良版があります。
先日、お客さんと話をしていて「年齢の修正を忘れてて5歳ぐらい若くなってたわ〜」という話題になったのですが、そこでふと
「年齢を自動更新するショートコードを作ればこういった修正忘れがなくなるのでは!?」
と閃いたので、サクッと作成してみました。
年齢自動更新ショートコード
/**
* 年齢を自動更新して表示するショートコード
* [age birth=""]
*
* 属性値の詳細
* birth:誕生日 yyyymmdd
*/
add_shortcode( 'age', 'auto_update_age' );
function auto_update_age( $atts, $content = null ) {
$atts = shortcode_atts(
array(
'birth' => '',
),
$atts
);
$birth = intval( $atts['birth'] );
if ( $birth > 0 ) {
return (int) ( ( date( 'Ymd' ) - $birth ) / 10000 );
} else {
return '?';
}
}
使い方はこんな感じでYmd形式で年齢を指定します。
私の年齢は[age birth="19880313"]歳です。
表示例:私の年齢は36歳です。
ちなみにYmdというのは、
- Y 4桁の西暦
- m 月(一桁の月は0をつける)
- d 日(一桁の日には0をつける)
という意味です。
birthの値が空白だったり文字を設定すると“?”が表示されます。数字の場合はエラーチェックしていないので、間違えるととんでもない年齢が出ます。それはそれで遊べるかもしれません。
年齢をぼやかしたい人向け
年齢をハッキリ表示させるのはちょっと…という人のために、一桁目は切り捨てる機能を追加したバージョンです。
まぁ、こんなの使うなら最初から年齢書くなという話もありますが…
/**
* 年齢を自動更新して表示するショートコード
* [age birth="" floor=""]
*
* 属性値の詳細
* birth:誕生日 yyyymmdd
* floor:一桁目を切り捨てるかどうか on/off
*/
add_shortcode( 'age', 'auto_update_age' );
function auto_update_age( $atts, $content = null ) {
$atts = shortcode_atts(
array(
'birth' => '',
'floor' => 'off',
),
$atts
);
$birth = intval( $atts['birth'] );
if ( $birth > 0 ) {
$age = (int) ( ( date( 'Ymd' ) - $birth ) / 10000 );
if ( 'on' === $atts['floor'] ) {
$age = floor( $age / 10 ) * 10;
}
return $age;
} else {
return '?';
}
}
使い方はほぼ同じですが、属性値が一つ増えています。floor="on"
とすると一桁目が切り捨てられます。デフォルトはfloor="off"
です。
私の年齢は[age birth="19880313" floor="on"]代です。
表示例:私の年齢は36代です。
年齢を計算するアルゴリズムについて
このショートコードではまず16行目で入力した値を整数にしています。これはbirthに文字列を入れた場合の簡単なエラー処理です。
intval()関数を使うと数字でない文字列ではほとんどの場合0になることを利用しており、文字列を入力したら“?”が表示されます。厳密に判定するなら正規表現でチェックがベストですが今回の目的ではそこまで不要かなと。
年齢計算のアルゴリズムは有名なもので、
(基準日-生年月日)/10000 を小数点以下切り捨て
とするとあら不思議、基準日からの年齢になります。
ただし、役所など年齢の切り替わりを厳密に管理する必要がある場合はこれではダメでもっと複雑なアルゴリズムを使う必要があるようです。詳しくは下記の記事で。
「生年月日から年齢を計算する簡単な計算式」は使えるとは限らない – ある地方公務員電算担当のナヤミ
今回のようなプロフィールに表示させる年齢のようなゆるい用途ではそのまま使って問題ないでしょう。
コメント
この記事へのコメントはありません。