MW WP Formのフォーム識別子のkeyを動的に取得する方法

こんにちは!

副業でWeb制作コーダーとして制作会社様などからWebサイトコーディング、WordPress構築のお仕事を受託しているアラフォーサラリーマンのひでかずです

MW WP Formって、デフォルトで確認・完了画面が使えたり、
フックでバリデーションメッセージの変更や、条件分岐フォームを作ったりできて
使い勝手がめちゃめちゃいいので使ってる人も多いんじゃないでしょうか?

僕もよく使ってます!

ですが、フォーム1つ1つに識別子のkeyが付与され、フック使用時にはこのkeyの番号をフック名に含めなければいけません

これが少しネックで、本番環境のデータベースとローカルやステージング環境のデータベースを全く同じにできない場合(インポートできない場合)にkeyが異なることが往々にしてあります
(それぞれの環境でWP管理画面からフォームを作るからですね)

そこで、以前こんなツイートをしました

通常だと、keyの数字が変わるとフック名を変更しなければならないので、本番環境への反映時にソースコードも変更しなければなりません

このkeyが動的に取得できると、データベースの内容が異なっていてもソースコードを書き換える必要がなくなり、使い勝手がもっと上がると考えました!

なので、今回はMW WP Formのフックを使うときにフック名に含まれるフォーム識別子のkeyを動的に取得する方法について解説します

※フックを使ったMW WP Formのカスタマイズはまた別の記事で書こうと思います

やり方の解説

手順としては以下のとおりです

  1. MW WP Formで作成したフォームの画面で「スラッグ」を表示させる
  2. 表示させたスラッグを適当な英数字にする
  3. functions.php内で get_page_by_path() を使用してスラッグからIDを取得
  4. 取得したIDを使用してフックを使用

詳しく説明していきます

MW WP Formで作成したフォームの画面で「スラッグ」を表示させる

MW WP Formで作成したフォームを開き、右上の「表示オプション」を開きます

開くと、「スラッグ」があるので、これにチェックを入れてスラッグを表示させる

表示させたスラッグを適当な英数字にする

少しスクロールすると「スラッグ」が表示されています

変更前はフォームのタイトルが設定されているので、後でソースコードから扱いやすい適当な英数字に変更する

functions.php内で get_page_by_path() を使用してスラッグからIDを取得

get_page_by_path()を使用してスラッグと投稿タイプを指定し、投稿のIDを取得

メモ

このIDがMW WP Formのフォーム識別子のkey番号になっています

/**
 * お問い合わせフォームのフォーム識別子のkeyを取得
 */
$inqury_form_id = get_page_by_path('inquiry_form', OBJECT, 'mw-wp-form')->ID;

取得したIDを使用してフックを使用

あとは、取得したIDを使用して使用したいフックを呼べばOKです!

下記は例としてバリデーションメッセージを変更するフックを呼んでいます


/**
 * お問い合わせフォームのフォーム識別子のkeyを取得
 */
$inqury_form_id = get_page_by_path('inquiry_form', OBJECT, 'mw-wp-form')->ID;

/**
 * my_error_message
 * @param string $error
 * @param string $key
 * @param string $rule(半角小文字)
 */
function my_error_message( $error, $key, $rule ) {
    if ( $key === 'お名前' && $rule === 'noempty' ) {
        return 'お名前が入力されておらぬぞ';
    }
    return $error;
}
add_filter( 'mwform_error_message_mw-wp-form-' . $inqury_form_id, 'my_error_message', 10, 2 );

ちょっと解説

これ以降はこの実装でできるかなと考えるに至った経緯・考えを書いていますので、必要ない人はここで閉じていただいても大丈夫ですww

URL見ると分かる通りMW WP Formもカスタム投稿の一つですね!

で、MW WP Form自体のソースコードを見てみると、やっぱり register_post_type()が使われています!

これはカスタム投稿を増やすときに使うWPの関数ですよね!

なので固定ページや投稿と同じようにget_page_by_path()で取得できるんじゃないかと思ったわけです!

まとめ:MW WP Formもカスタム投稿タイプの一つ!

プラグインを使用するとなると、特別に考えがちですが(僕だけ?)、よくよく観察するといつも使ってる馴染み深い処理があったりして、「あ、じゃぁこれでできるやん」とかいう発見がありますね!

これからも何か発見したらここで紹介してきたいと思います!

最後まで読んでいただきありがとうございました!

なんかご意見、ご感想、ご質問あれば下のコメント欄からお気軽にどうぞ!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA