1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MW WP Formでphpファイルから自由に選択項目を設定する

Last updated at Posted at 2019-05-21

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」の投稿を選択肢として表示してますが、もっと単純に静的な項目でも簡単に設定できます。

functions.php
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一つで設定できる

functions.php
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のような管理用ファイルで設定するっていうのもできます。

マニュアルの例より簡単なことしてるけど、意外とこっちの方が使う機会多いんだよな。。

もっといい方法あればぜひ教えてください!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?