勉強したことのメモ

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 Form 7から送信した内容をダッシュボードから確認及びCSVファイル化する方法

WordPressのContact Form 7プラグインで実装されたお問い合わ ...

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

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

WordPressのContact Form 7プラグインでユーザーに対して自動返信メールを送信する方法

WordPressのContact Form 7プラグインで実装されたお問い合わ ...

WordPressのContact Form 7プラグインで入力内容確認及び送信完了ページを実装する方法

WordPressのContact Form 7プラグインで実装されたお問い合わ ...

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

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