MW WP Form便利ですよね。
確認画面も付いてるし
デザインも柔軟に変更できるし
カスタマイズも容易だし
日本人開発のため日本語情報多いし(重要)
ただWordpressって管理画面に入ってなにか作業するのってダルいので、極力phpファイルで出来るようにしています。
なので今回は投稿画面でなくphpファイル内(functions.php)でセレクトボックスやチェック、ラジオの項目を設定する方法を書きたいと思います。
mwform_choices_mw-wp-form-xxx を使う
https://plugins.2inc.org/mw-wp-form/filter-hook/mwform_choices/
これ利用すると管理画面外から色々設定できます。
例ではカスタム投稿タイプ「products」の投稿を選択肢として表示してますが、もっと単純に静的な項目でも簡単に設定できます。
function add_discount( $children, $atts ) {
$discounts = ['割引A','割引B','割引C'];
if ( $atts['name'] == 'discount' ) {
foreach ( $discounts as $discount ) {
$children[$discount] = $discount;
}
}
return $children;
}
add_filter( 'mwform_choices_mw-wp-form-xxx', 'add_discount', 10, 2 );
管理画面上では空で設定しておけばよいです。":--"にしておくと最初の項目が"--"でvalue=""
の状態になります。
[mwform_select name="discount" children=":--" post_raw="true"]
複数項目あってもmw_form_choice一つで設定できる
function custom_form_contents( $children, $atts ) {
$discounts = [...];//配列で設定。以下同文
$options1 = [...];
$options2 = [...];
switch ($atts['name']) {
case 'discount':
foreach ( $discounts as $discount ) {
$children[$discount] = $discount;
}
break;
case 'option1':
foreach ( $options1 as $option1 ) {
$children[$option1] = $option1;
}
break;
case 'option2':
foreach ( $options2 as $option2 ) {
$children[$option2] = $option2;
}
break;
default:
break;
}
return $children;
}
add_filter( 'mwform_choices_mw-wp-form-xxx', 'custom_form_contents', 10, 2 );
switchで条件分岐させれば複数あっても適用できます。$discounts
の配列部分もrequire
とかinclude
使えば別ファイルからも渡せるのでconfig.phpのような管理用ファイルで設定するっていうのもできます。
マニュアルの例より簡単なことしてるけど、意外とこっちの方が使う機会多いんだよな。。
もっといい方法あればぜひ教えてください!