LoginSignup
7

More than 5 years have passed since last update.

MW WP Formプラグインで管理者宛メールとデータベースにフォーム送信者情報を追加してみる

Last updated at Posted at 2017-07-15

WordpressのMW WP Formプラグインで、管理者宛メールとデータベースにフォーム送信者情報(IPとかユーザーエージェントなど)を追加するフィルターフックのやり方。

手順

  1. テーマ内のfunction.phpにフィルターフックを追加する。mwform_custom_mail_tag_mw-wp-form-xxxにフィルターフックをかける。
  2. MW WP Formプラグインの「フォームを編集」から、追加したキーを管理者宛メール設定の「本文」に入れる。
  3. 「問い合わせデータをデータベースに保存」にチェックする。

mwform_custom_mail_tag_mw-wp-form-xxxのフィルターフック

※ 詳しくは公式サイトのドキュメントを参照:
mwform_custom_mail_tag_mw-wp-form-xxx | MW WP Form

要するに、オリジナルの「メールタグ」として、送信者のユーザーエージェント、IP、ホストなどを定義してしまえば良いということです。

/**
 * {user_agent} UAに変換
 * {ip} IPに変換
 * {host} HOSTに変換
 * {send_datetime} 送信日時に変換
 * 
 * @param string $value 送信された値
 * @param string $key メールタグ
 * @param int $insert_contact_data_id データベースに保存した場合、そのときの Post ID
 */
function add_sender_info( $value, $key, $insert_contact_data_id ) {

    if ( $key === 'user_agent' ) {
        return $_SERVER["HTTP_USER_AGENT"];
    }
    if ( $key === 'ip' ) {
        $ip = $_SERVER["REMOTE_ADDR"];
        return $ip;
    }
    if ( $key === 'host' ) {
        $host = gethostbyaddr($_SERVER["REMOTE_ADDR"]);
        return $host;
    }
    if ( $key === 'send_datetime' ) {
        $org_timezone = date_default_timezone_get();
        date_default_timezone_set('Asia/Tokyo'); //タイムゾーンを日本に
        $Datetime = date("Y年n月j日 H:i:s");
        date_default_timezone_set($org_timezone); //タイムゾーン戻す
        return $Datetime;
    }

    return $value;
}

add_filter( 'mwform_custom_mail_tag_mw-wp-form-xxx', 'add_sender_info', 10, 3 );

「フォームを編集」から、管理者宛メール設定で本文に追加したキーを入力し、「問い合わせデータをデータベースに保存」にチェックする。

screenshot-stg.utsude.com 2017-07-15 13-59-15.png

これで、管理者宛メールに送信者情報が入り、かつデータベースに保存時にも送信者情報として各項目が追加されるようになります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
7