MW WP Formは国産プラグインでContact Form 7より柔軟性がある。(確認ページやサンクスページ、メールデータの保存など)
生年月日など入力項目を分割してバリデーションをかけると年、月、日にそれぞれエラーメッセージが出てしまうので、年月日に一括してバリデーションをかける方法。
[mwform_select name="birth-year" children=":---,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997" post_raw="true" show_error="false"]年 [mwform_select name="birth-month" children=":---,1,2,3,4,5,6,7,8,9,10,11,12" post_raw="true" show_error="false"]月 [mwform_select name="birth-date" children=":---,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31" post_raw="true" show_error="false"]日 [mwform_error keys="birth-year,birth-month,birth-date"]
それぞれのセレクトボックスのショートコードに「show_error=”false”」を入れる
functions.php
function entry_validation_rule( $Validation, $data) {
$validation_message2 = '未入力項目があります。';
if ( empty( $data['birth-year'] ) ) {
$Validation->set_rule( 'birth-year', 'noempty', array( 'message' => $validation_message2 ) );
} elseif ( empty( $data['birth-month'] ) ) {
$Validation->set_rule( 'birth-month', 'noempty', array( 'message' => $validation_message2 ) );
} elseif ( empty( $data['birth-date'] ) ) {
$Validation->set_rule( 'birth-date', 'noempty', array( 'message' => $validation_message2 ) );
}
return $Validation;
}
add_filter( 'mwform_validation_mw-wp-form-5', 'entry_validation_rule', 10, 2 );
最後の行、mwform_validation_mw-wp-form-5の
5は、ショートコードの[mwform_formkey key=”5″]このkeyの数字
年月日の選択肢を自動挿入する記述(特に年は自動的に15歳~60歳の範囲)
add_filter( 'mwform_choices_mw-wp-form-xxx', 'mwform_add_birthday_options', 10, 2 ); //xxxのところは、MW WP Form のフォームIDを入れてください
function mwform_add_birthday_options( $children, $atts ) {
// 年設定
if ( $atts['name'] === 'birthday_year' ) {
$current_year = date( 'Y' );
$start_year = $current_year - 15;
$max_year = $current_year - 60;
$default_year = $current_year - 30;
for ( $i = $max_year; $i <= $start_year; $i++ ) {
$children[$i] = $i;
if( $i == $default_year ){ $children[''] = ''; }
}
}
// 月設定
if ( $atts['name'] === 'birthday_month' ) {
$children[''] = '';
for ( $i = 1; $i <= 12; $i++ ) {
$children[$i] = $i;
}
}
// 日設定
if ( $atts['name'] === 'birthday_day' ) {
$children[''] = '';
for ( $i = 1; $i <= 31; $i++ ) {
$children[$i] = $i;
}
}
return $children;
}
年の初期値を「空白」にする
function my_mwform_value_b( $value, $name ) {
if ( $name === 'birthday_year' ) { // 設定したいname属性
$value = '';
return $value;
}
return $value;
}
// xxxにはフォームのIDが入ります。
add_filter( 'mwform_value_mw-wp-form-xxx', 'my_mwform_value_b', 10, 2 );