MW WP Formのカスタマイズをslugで指定する

PHPワードプレス関数ファイルMW WP Formカスタムフィールドショートコードプラグインメールフォーム関数

多分、フィルターフックって呼ぶのかなぁ、自信が無いですが、

add_filter( 'mwform_admin_mail_mw-wp-form-〇〇〇', 'my_mail', 10, 3 );

こんな感じで特定のフォームの動作をカスタマイズすることがよくあると思います。

「○○○」の部分は「formkey」で、フォームのidみたいなもの。

なので任意に決められず、別サイトとはまず一致しません。

 

以前書いた「フォームを通した資料請求、投稿のデータを引き継ぐケース」の動作サンプルもformkeyで指定していて、新しいテーマを上書きしたおかげで動作しなくなっていました。(試してくれた方、がっかりさせてしまい申し訳ありません。)

スラッグを付与できる

何か方法はないかと検索していると、フォームに「slug」が付与できることを発見。(表示オプション内にあります。)

フォームの呼び出し(ショートコード)がformkeyではなく、slugで出来ます。

「mwform_formkey slug=”form_contact”」

 

更に、ピンポイントで「WordPress MW WP Formの投稿IDをスラッグから取得する関数」という記事発見。

ならばフィルターフックも

これなら、「fuctions.phpでも同じようにスラッグ指定ができるはず」と思いコピペさせていただき、試してみました。

/* ---------- MW WP Form slugからformkeyを取得する ---------- */
function ag_get_mwwpform_id( $slug='' ){
	global $wpdb;
	$table = $wpdb->prefix . 'posts';
	$query  = "SELECT * FROM $table WHERE post_type='mw-wp-form' AND post_status='publish' AND post_name= %s";
	$result = $wpdb->get_row( $wpdb->prepare( $query, $slug ) );
	return ( int )$result->ID;
}
/* ---------- 投稿のカスタムフィールドによって自動返信の内容を変える ---------- */
function my_mail_var( $Mail, $values, $Data ){
	if( get_post_meta( $_GET['post_id'], 'file_upload', true ) ){
		$file = get_post_meta( $_GET['post_id'], 'file_upload', true );
		$file_url = wp_get_attachment_url( $file );
		$file_anker = get_post_meta( $_GET['post_id'], 'file_anker', true );
		$Mail->body .= '資料「' . $file_anker . '」は下記よりダウンロードいただけます。' . "\n" . $file_url . "\n" . "\n";
	}
	return $Mail;
}
$auto_mail_form_dl_arg = 'mwform_auto_mail_mw-wp-form-' . ag_get_mwwpform_id( 'form_dl_arg' );
$admin_mail_form_dl_arg = 'mwform_admin_mail_mw-wp-form-' . ag_get_mwwpform_id( 'form_dl_arg' );
add_filter( $auto_mail_form_dl_arg, 'my_mail_var', 10, 3 );
add_filter( $admin_mail_form_dl_arg, 'my_mail_var', 10, 3 );

「form_dl_arg」がフォームのslug

 

フィルターフック名がこんな風になっている例、見たことないので「書き方絶対違うだろう」と思いますが、とりあえず確認したところ、formkeyで指定したときと同じ動作をしてくれました。

 

自前関数の書き方を練習して加筆・修正するつもりですが、ひとまず殴り書きメモで。