経緯
ニッチなカスタマイズですが、 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"
の入力項目に対して値をセット - 今回はログインしているかどうかを判定し、ログインしている場合はユーザのニックネームをセット
- MW WP Form のページが開かれた際に、
teenut_autocomplete_mwform_input_shortcode_tag()
:- MW WP Form のショートコードが展開される際に
name="name"
のinput
タグ にreadonly
属性 を付与
- MW WP Form のショートコードが展開される際に
肝は前者ですね。後者は自動入力されたものに対して変更は通常しないと思うので readpnly
を付けておこう、くらいのものです。
検証
では上述コードをプラグインとしてインストールし、 MW WP Form も用意して検証してみます。
このようなテストのフォームを作成します。
プラグインを有効化していない状態では普通のフォームです。
次にプラグインを有効化します。すると、最初の name="name"
の入力項目にログインしているユーザのニックネームが自動で補完されるようになりました。意図通りです。