前回、年齢を自動更新するショートコードを作りましたが、その話をした嫁さんから「どうせならアラサーとかアラフォーとか表示させれないの?」という要望(?)をもらいました。
まぁ、需要があるかは全く不明ですが面白そうなので対応してみました。
これぞ日本国内における年齢自動更新ショートコードの決定版でしょう(笑)
ショートコードの仕様
そもそもアラサーの定義は?
アラサーの定義を調べてみたところ、下記のサイトに詳しく書かれていました。
アラサーやアラフォーって何歳から何歳まで?どのような由来や定義なの – 気になる話題・おすすめ情報館
このサイトによると年齢±3歳 or 四捨五入の2種類を紹介しています。さらにアラカンやアラナイなども書かれています。
一方、Wikipediaを調べる年齢±2と四捨五入の2種類の定義が掲載されていました。さらに100歳前後を意味するアラハンも紹介されています。
このあたりをまとめると年齢の区切りとしては、
- 年齢±2歳
- 年齢±3歳
- 四捨五入
の3パターンがあるようです。プログラム的にはこれら全てに対応可能ですが、±3歳と四捨五入では小さい側の差が小さい(33歳と34歳)ので微妙な気がしました。そこで今回のショートコードでは
- 年齢±2歳
- 四捨五入
の2パターンを属性値で切り変える仕様としています。
アラサーなどの呼び名の種類
次にアラサーなどの呼び名の種類ですがこれが結構たくさんあります。
名前 | ±2歳 | 四捨五入 | 語源 |
---|---|---|---|
アラトゥエ アラハタ | 18歳〜22歳 | 15歳〜24歳 | around twenty around 二十歳(ハタチ) |
アラサー | 28歳〜32歳 | 25歳〜34歳 | around thirty |
アラフォー | 38歳〜42歳 | 35歳〜44歳 | around forty |
アラフィフ | 48歳〜52歳 | 45歳〜54歳 | around fifty |
アラカン | 58歳〜62歳 | 55歳〜64歳 | around 還暦 |
アラセブ アラコキ | 68歳〜72歳 | 65歳〜74歳 | around seventy around 古希 |
アラエイ アラサン | 78歳〜82歳 | 75歳〜84歳 | around eighty around 傘寿 |
アラナイ | 88歳〜92歳 | 85歳〜94歳 | around ninety |
アラハン アラヒャク | 98歳〜102歳 | 95歳〜105歳 | around hundred around 百 |
一部呼び方が2種類あるものもあります。せっかくなので今回はこれらを選択できるようにしました。
該当しない年齢の処理
年齢±2歳モードでは例えば35歳とか36歳だと名前にできません。その場合にどのように表示させるかを決める必要があります。
アラサー表記をしたい人の気持ちを考えると、年齢をダイレクトに出したくない可能性が高そうです。そこで、該当年齢以外は30代、40代というように実年齢ではなく年代で表示する仕様としました。
また14(or 12)歳以下や106( or 103)歳以上をどうするかですが、ここも同様に年代表示とします。ただし9歳以下は10歳未満と表示することにしました。
以上で仕様は決まったので、それに従ってショートコードを作ってみました。
ショートコードのコード
/**
* 年齢を自動更新して表示するショートコード
* [age birth="" display="" mode=""]
*
* 属性値の詳細
* birth:誕生日 yyyymmdd
* display:表示方法の切り替え number/generation/name/round
* mode:名前のタイプを切り替え english/japanese
*/
add_shortcode( 'age', 'auto_update_age' );
function auto_update_age( $atts, $content = null ) {
$suffix = '代';
$under_teen = '10歳未満';
$atts = shortcode_atts(
array(
'birth' => '',
'display' => 'number',
'mode' => 'english',
),
$atts
);
// 数値に変換
$birth = intval( $atts['birth'] );
// 数字以外だった場合は?を表示
if ( ! $birth ) {
return '?';
}
// 年齢を計算
$age = (int) ( ( date( 'Ymd' ) - $birth ) / 10000 );
if ( 'number' === $atts['display'] ) {
// 数字そのままを表示
return $age;
} elseif ( 'generation' === $atts['display'] ) {
// 年代表示(1桁目を切り捨て)
if ( $age < 10 ) {
return $under_teen;
}
return floor( $age / 10 ) * 10 . $suffix;
} else {
// 一桁目の数字
$digit_1 = $age - intval( $age / 10 ) * 10;
// 四捨五入した二桁目の数字
$digit_2 = round( $age / 10, 0 );
// 年題名を配列て定義
if ( 'japanese' == $atts['mode'] ) {
$names = array(
'アラハタ',
'アラサー',
'アラフォー',
'アラフィフ',
'アラカン',
'アラコキ',
'アラサン',
'アラナイ',
'アラヒャク',
);
} else {
$names = array(
'アラトゥエ',
'アラサー',
'アラフォー',
'アラフィフ',
'アラカン',
'アラセブ',
'アラエイ',
'アラナイ',
'アラハン',
);
}
// 10歳未満
if ( $age < 10 ) {
return $under_teen;
}
if ( 'round' === $atts['display'] ) {
// 四捨五入で年代判断する場合
// 105歳以上は年代を表示
if ( $age >= 105 ) {
return floor( $age / 10 ) * 10 . $suffix;
}
// 14歳以下は10代
if ( $age <= 14 ) {
return '10' . $suffix;
}
// その他
return $names[ $digit_2 - 2 ];
} elseif ( 'name' === $atts['display'] ) {
// ±2歳で年代判断する場合
// 103歳以上は年代を表示
if ( $age >= 103 ) {
return floor( $age / 10 ) * 10 . $suffix;
}
// 17歳以下は10代
if ( $age <= 17 ) {
return '10' . $suffix;
}
// その他
if ( $digit_1 < 3 || $digit_1 > 7 ) {
// 1桁目が0〜3もしくは7以上の場合
return $names[ $digit_2 - 2 ];
} else {
// 他は年代表示
return floor( $age / 10 ) * 10 . $suffix;
}
}
}
}
年齢表示ショートコードの使い方
[age birth="誕生日" display="表示形式" mode="表示モード"]
このショートコードは3つの属性値をもちます。そのうち、birthのみ必須で、後は指定しなければデフォルトが適用されます。
- birth 年齢
Ymd形式で指定 - display どのように表示するか、選択肢は4種類
- number:数字(デフォルト)
- generation:年代
- name:アラサーなど(±2歳)
- round:アラサーなど(四捨五入)
- mode アラサーの表記を指定
- english:アラトゥエ、アラハンなど英語ベース(デフォルト)
- japanese:アラトゥエ、アラヒャクなど日本語ベース
birthの値が空白だったり文字を設定すると“?”が表示されます。数字の場合はエラーチェックしていないので、間違えるととんでもない年齢が出ます。それはそれで遊べるかもしれません。
ちなみにYmdは日時を表すフォーマットの一つで次のような意味になります。
- Y 4桁の西暦
- m 月(一桁の月は0をつける)
- d 日(一桁の日には0をつける)
例えば、1992年3月21日だと19920321となります。
年齢ショートコード使用例
ここの表記例は実際にこのショートコードを使って表示しているので、時が経つと表示が変わりますのでご了承ください。
年齢をそのまま表示
最もシンプルな使い方です。数字しか出力されません。
私の年齢は[age birth="19880313"]歳です。
私の年齢は36歳です。
年代を表示
10代、20代といった表示になります。「代」は自動的に付与されます。
私の年齢は[age birth="19880313" display="generation"]です。
私の年齢は[age birth="19001203" display="generation"]です。
私の年齢は30代です。
私の年齢は120代です。
アラサー表示(±2歳)
アラサーなど年代に合わせて表示が変わります。17歳以下と103歳以上、その他の年代±2歳以外は年代表示になります。mode="japanese"
を指定すると一部が日本語ベースの表示になります。
私は[age birth="19880313" display="name"]女子です。
私は[age birth="19880313" display="name" mode="japanese"]女子です。
私は[age birth="19770313" display="name"]で〜す。
私は[age birth="19770313" display="name" mode="japanese"]で〜す。
私は[age birth="19750313" display="name"]で〜す。
私は[age birth="19750313" display="name" mode="japanese"]で〜す。
私は[age birth="19170313" display="name"]といわれとる
私は[age birth="19170313" display="name" mode="japanese"]といわれとる
私は[age birth="19090313" display="name"]になるぞよ
私は[age birth="19090313" display="name" mode="japanese"]になるぞよ。
私は20代女子です。
私は20代女子です。
私は40代で〜す。
私は40代で〜す。
私はアラフィフになるわ。
私はアラフィフになるわ。
私は100代といわれとる。
私は100代といわれとる。
私は110代になるぞよ
私は110代になるぞよ。
アラサー表示(四捨五入)
四捨五入の方式でアラサーなどを表示します。14歳以下と104歳以上は年代表示になります。こちらもmode="japanese"
とすると一部が日本語ベースの表示になります。
私は[age birth="19880313" display="round"]女子です。
私は[age birth="19880313" display="round" mode="japanese"]女子です。
私は[age birth="19770313" display="round"]で〜す。
私は[age birth="19770313" display="round" mode="japanese"]で〜す。
私は[age birth="19750313" display="round"]で〜す。
私は[age birth="19750313" display="round" mode="japanese"]で〜す。
私は[age birth="19170313" display="round"]といわれとる
私は[age birth="19170313" display="round" mode="japanese"]といわれとる
私は[age birth="19090313" display="round"]になるぞよ
私は[age birth="19090313" display="round" mode="japanese"]になるぞよ。
私はアラフォー女子です。
私はアラフォー女子です。
私はアラフィフで〜す。
私はアラフィフで〜す。
私はアラフィフで〜す。
私はアラフィフで〜す。
私は100代といわれとる
私は100代といわれとる
私は110代になるぞよ
私は110代になるぞよ。
いかがだったでしょうか?
基本的にはfunctions.phpにこのコードをそのままコピペしてもらえば動きます。年代の後につけるテキストや10歳未満の表示を変えたい場合は、冒頭の変数の設定を書き換えてください。
プロフィールでの年齢以外にも「お店がオープンして15周年になりました」みたいなときに便利に使えると思います。
コメント
この記事へのコメントはありません。