勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

Contact form7でフォーム送信時に別サーバへもデータを送信する方法

   2024/09/20  WordPress

contact form7でフォーム送信時に別サーバーでフォーム内容をPOST送信したかった。以下に方法をメモ。

 

送信側

WordPressのテーマフォルダ内にあるfunctions.phpに以下を追記する。

add_action('wpcf7_mail_sent', 'gloc_wpcf7_insert_post', 10, 1);
function gloc_wpcf7_insert_post(){
    $submission = WPCF7_Submission::get_instance();
    if ( $submission ) {
        $formdata = $submission->get_posted_data();

        //var_dump($formdata); //$formdataの中にフォーム送信内容が入る

        $url = 'http://test.com/get.php'; //受け取り先のURL

        //$formdataのkeyは適宜書き換える
        $query = array(
            'name' => $formdata['name'], 
            'mail' => $formdata['mail'], 
            'pass' => $formdata['pass'], 
        );

        //URLエンコードされたクエリ文字列を生成
        $content = http_build_query($query, '', '&');

        //ヘッダ設定
        $header = array(
            'Content-Type: application/x-www-form-urlencoded', //form送信の際、クライアントがWebサーバーに送信するコンテンツタイプ
            'Content-Length: '.strlen($content) //メッセージ本文の長さ
        );

        //ストリームコンテキスト設定
        $context = array(
            'http' => array(
                'ignore_errors' => true, //ステータスコードが失敗を意味する場合でもコンテンツを取得
                'method' => 'POST', //メソッド。デフォルトはGET
                'header' => implode("\r\n", $header), //ヘッダ設定
                'content' => $content //送信したいデータ
            )
        );
        $res = file_get_contents($url, false, stream_context_create($context));

    }
}

 

受信側

今回はデータを受け取ってデータベースに格納するという想定。以下ファイルを設置する。

header('Access-Control-Allow-Origin: *'); //クロスドメイン対策

$msg = 0;

if( $_POST['name'] && $_POST['mail'] && $_POST['pass'] ){

    $sql = '
        INSERT INTO test_table 
            (name, mail, pass, regist) 
        VALUES 
            (
                "'.$mysqli->real_escape_string($_POST['name']).'", 
                "'.$mysqli->real_escape_string($_POST['mail']).'", 
                "'.$mysqli->real_escape_string($_POST['pass']).'", 
                now() 
            )
    ';

    $row = $mysqli->query($sql);
    $msg = ($row) ? $mysqli->insert_id : 0;

}

echo $msg;

 

その他

別サーバーかつ受取側がHTTPSだったので、そのあたりで躓くかと思いきや特に問題は発生しなかった。

 

参考サイト

http://daily.glocalism.jp/wordpress/contact-form-7-hooks/

 - WordPress

  関連記事

WordPressのcontact form7で500エラーの対応方法

WordPressプラグインのcontact form7で送信ボタンを押し、ロー ...

Contact form7で送信数を測定(トラッキングタグ)

contact form7でフォーム送信が完了した時点で計測されるようにトラッキ ...