MW WP Form のフィールドにログインユーザの名前を自動入力する

経緯

ニッチなカスタマイズですが、 MW WP Form のフィールドにログインに応じて自動入力をしてみたいと思います。

今回はサンプルとして、

  • 特定の MW WP Form ページにアクセスした際
  • WordPress のユーザとしてログインしているならば
  • ログインしているユーザのニックネームを表示

ということをしてみたいと思います。

コード

function teenut_autocomplete_mwform_name( $value, $name ) {
    // ログインしている場合
    if ( is_user_logged_in() ) {
        //項目追加: MW WP Form の name="name" の項目の初期値 value にニックネーム設定 )
        if ( $name === 'name' ) {
            $current_user = wp_get_current_user();
            $value = $current_user->nickname; // ニックネーム(プロパティ名)
        }
    }
    return $value;
}
/**
 * アクションフック
 *
 * `mw-wp-form-xxx` はフックで使用する修飾子。 `xxx`はフォーム識別子として作成したフォームの投稿IDとする
 * ※今回はサンプルなので投稿IDはハードコーディング
 */
add_filter( 'mwform_value_mw-wp-form-xxx', 'teenut_autocomplete_mwform_name', 10, 2 );

function teenut_autocomplete_mwform_input_shortcode_tag( $output, $tag, $attr ) {
    // ログインしている場合
    if ( is_user_logged_in() ) {
        if ( $tag == 'mwform_text' && $attr['name'] == 'name' ) {
            $output = str_replace( '<input ', '<input readonly ', $output );
        }
    }
    return $output;
}
add_filter( 'do_shortcode_tag', 'teenut_autocomplete_mwform_input_shortcode_tag', 10, 3 );

やっていることは次の2つ。

  • teenut_autocomplete_mwform_name():
    • MW WP Form のページが開かれた際に、 name="name" の入力項目に対して値をセット
    • 今回はログインしているかどうかを判定し、ログインしている場合はユーザのニックネームをセット
  • teenut_autocomplete_mwform_input_shortcode_tag():
    • MW WP Form のショートコードが展開される際に name="name"inputタグ に readonly属性 を付与

肝は前者ですね。後者は自動入力されたものに対して変更は通常しないと思うので readpnly を付けておこう、くらいのものです。

検証

では上述コードをプラグインとしてインストールし、 MW WP Form も用意して検証してみます。

MW WP Form のテストフォーム
MW WP Form のテストフォーム

このようなテストのフォームを作成します。

プラグインを有効化していない状態のテストフォーム
プラグインを有効化していない状態のテストフォーム

プラグインを有効化していない状態では普通のフォームです。

プラグインを有効化した状態のテストフォーム
プラグインを有効化した状態のテストフォーム

次にプラグインを有効化します。すると、最初の name="name" の入力項目にログインしているユーザのニックネームが自動で補完されるようになりました。意図通りです。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。