サイトアイコン WEBデザインMATOME

MW WP Form で「西暦100年分のドロップダウン」を自動生成する方法

1. ゴールイメージ

beforeafter
[mwform_select] を置くと手入力の “固定選択肢” だけ年が 最新(今年)→100 年前 まで自動で並ぶ
新年になっても放置で OK

基本コンセプト

  1. フォーム側
    • いつものタグジェネレーターで mwform_select を挿入
    • children(選択肢)欄は空にする
  2. テーマ側(functions.php)
    • mwform_choices_{フォームID} フィルタで 選択肢配列を差し替え
    • date('Y') から range()動的に年を生成

フォーム編集画面での設定

  1. WordPress ダッシュボード → MW WP Form → フォーム編集
  2. タグジェネレーターから セレクトボックス を挿入 htmlコピーする編集する[mwform_select name="birth_year" show_error="true"]
  3. children は空欄
    • 空でも保存できるのでご安心を
  4. 必須チェックを入れたい場合は htmlコピーする編集する[mwform_validation_rules name="birth_year" rules="required"]

functions.php に追記するコード

/**
* birth_year の選択肢を動的に生成
*
* フィルタ名の末尾「123」はフォームIDに置き換えてください。
* 例)フォームID=5 → 'mwform_choices_mw-wp-form-5'
*/
add_filter( 'mwform_choices_mw-wp-form-123', function ( $choices, $atts ) {

// 該当フィールド以外はスルー
if ( $atts['name'] !== 'birth_year' ) {
return $choices;
}

// 今年から100年前までの配列を作成
$current = date( 'Y' ); // 例:2025
$years = range( $current, $current - 100 );

// ラベル => 値 の連想配列に変換
// 例) [2025 => 2025, 2024 => 2024, ...]
return array_combine( $years, $years );
}, 10, 2 );

コード解説

ポイント
$atts['name'] !== 'birth_year'同フォーム内の 他のセレクト には干渉しない安全策
date('Y')毎年 1 月 1 日の 0:00 に 自動で更新
range( $current, $current - 100 )降順 (start > end) にすると 自動で大きい順
array_combine()MW WP Form が求める ['ラベル' => '値'] 形式へ一発変換

もっとカスタマイズしたいときは?

目的変更ポイント
年の並びを昇順(古い→新しい)range()range( $current - 100, $current )
2000 年以降だけで良い$years = range( $current, 2000 );
初期値を空欄にしたいarray_unshift( $years, '' );array_combine()

動作確認 & デバッグ TIPS

  1. フォームを保存 → プレビュー
  2. ドロップダウンに 最新年(例:2025)~1925 が表示されれば成功
  3. うまくいかない場合は…
    • フォームID の数字を間違えていないか?
    • birth_yearname 属性 が一致しているか?
    • キャッシュ系プラグインが選択肢を握りつぶしていないか?

まとめ

来年・再来年と年が進んでも放置で OK。
「あのフォーム、年が古いまま…」問題 にサヨナラしましょう!

よくある質問

質問回答
Q. 確認画面やメールには何と書けばいい?[birth_year] と書くだけ。選択値(数値)が出力されます。
Q. プルダウンの CSS を変えたいclass="year-select" をタグジェネレータで追加し、CSS で .year-select { … } を指定。
モバイルバージョンを終了