多分、フィルターフックって呼ぶのかなぁ、自信が無いですが、
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で指定したときと同じ動作をしてくれました。
自前関数の書き方を練習して加筆・修正するつもりですが、ひとまず殴り書きメモで。