wordpressでバンドサイトを作る際、ライブチケットのメール予約なんかで、公演日のページから直接メールフォームでチケット予約をさせたい。
僕の場合は、カスタムフィールドに作った公演日、[live_date]の値をContact Form 7で送信したい。
やりたいこと↓
・wordpressのメール送信プラグインContact Form 7で、投稿のカスタムフィールドの値を送信したい。
・Contact Form 7をいじらず、functions.phpだけで対応したい。
(直接contactform7内に書くと、アップデートで消えてしまうから)
まずContact Form 7の管理ページで、メッセージ本文にショートタグ[live_date_check]を追加。
次に、functions.php内に
add_filter('wpcf7_special_mail_tags', 'my_special_mail_tags',10,2); function my_special_mail_tags($output, $name) { if ( ! isset( $_POST['_wpcf7_unit_tag'] ) || empty( $_POST['_wpcf7_unit_tag'] ) ) return $output; if ( ! preg_match( '/^wpcf7-f(\d+)-p(\d+)-o(\d+)$/', $_POST['_wpcf7_unit_tag'], $matches ) ) return $output; $post_id = (int) $matches[2]; if ( ! $post = get_post( $post_id ) ) return $output; $name = preg_replace( '/^wpcf7\./', '_', $name ); if ( 'live_date_check' == $name ) $output = get_post_meta($post->ID,live_date,true); return $output; }
と記述し、wpcf7_special_mail_tagsをフックする。
(live_dateがカスタムフィールドのキーで、live_date_checkというショートタグで出力)
ついでにメールでのトラブル解決用に、送信元のIPアドレスとUser Agentなんかも仕込んでおけばばっちり。
add_filter('wpcf7_special_mail_tags', 'my_special_mail_tags',10,2); function my_special_mail_tags($output, $name) { //UAとIPを追加 if(!isset($re_agent)){ $re_agent = $_SERVER['HTTP_USER_AGENT']; } if('user_agent' == $name){ $output = $re_agent; } if(!isset($re_addr)){ $re_addr = $_SERVER['REMOTE_ADDR']; } if('remote_addr' == $name){ $output = gethostbyaddr($re_addr); } //特別なタグを追加 if ( ! isset( $_POST['_wpcf7_unit_tag'] ) || empty( $_POST['_wpcf7_unit_tag'] ) ) return $output; if ( ! preg_match( '/^wpcf7-f(\d+)-p(\d+)-o(\d+)$/', $_POST['_wpcf7_unit_tag'], $matches ) ) return $output; $post_id = (int) $matches[2]; if ( ! $post = get_post( $post_id ) ) return $output; $name = preg_replace( '/^wpcf7\./', '_', $name ); if ( 'live_date_check' == $name ) $output = get_post_meta($post->ID,live_date,true); return $output; }
込み込みでこんな感じ。
参考(感謝)↓
WordPress ContactForm7の特別なメールタグを追加する方法
Contact Form 7 でユーザーエージェント