Pocket
LINEで送る

ContactForm7のフォーム情報をサーバに飛ばす

WordPress ContactForm7は、/includes/classes.phpがメインっぽいファイルで、WPCF7_ContactFormクラスに色々な処理が記載されている。
function setup_posted_data()で、メールフォームのフォーム情報をゲットして、WPCF7_ContactForm::posted_dataに格納している。
$posted_dataの中身は、$posted_data[$name] = $valueといった形になっている。
フォームのnameが、subjectであった場合、subjectへの記載内容は、$this->$posted_data[‘subject’]で取得できる。
function submit()で、エラー等がない場合にメール送信処理をしている。
メール送信処理は、do_action_ref_array( ‘wpcf7_mail_sent’, array( &$this ) );っぽい。
do_action_ref_arrayはWordPressの関数で、指定したアクション$tagに登録された関数を実行する。(参照:WordPressのプラグインを作る際に覚えておくと便利な関数まとめ

どこ探しても、wpcf7_mail_sentを設定している箇所がない。
http://wordpress.org/support/topic/plugin-contact-form-7-php-after-form-submit これを見ると、functions.phpに下記のような設定すると、submit時の追加処理ができるっぽいことが書いてある。

add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );

function your_wpcf7_mail_sent_function( $contact_form ) {
	$title = $contact_form->title;
	$posted_data = $contact_form->posted_data;

	if ( 'Your Contact Form Title Here' == $title ) {

		$phone = $posted_data['phone']; // if you have a field with name "phone"

		require_once 'SMS.class.php';
		$api = new LittleSMS('vasya', 'qwerty123', true);
		$api->sendSMS($phone, 'Бугагашенька!', 'vasya');

	}
}

ということで、下記functions.phpに下記にように記載すると、実際にできた。

/**
 * 
 * REST処理(コンタクトフォームの内容をJSONで別サーバに飛ばす)
 * 
 **/
add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
function your_wpcf7_mail_sent_function( $contact_form ) {
	$posted_data = $contact_form->posted_data;
	$json = json_encode($posted_data);
	$url = 'http://localhost/hogehoge/hoges.json';
	$response = wp_remote_post( $url, array(
			'method' => 'POST',
			'headers' => array(array('Content-type' => 'application/json','charset' => 'UTF-8')),
			'body' => $json
		)
	);
}

ContactForm7の情報をcakePHPで受け取る

参考;RESTリクエストとレスポンスオブジェクト

/app/Config/routes.phpに、下記を追加

//REST設定
Router::mapResources('コントローラー名');
Router::parseExtensions();

コントローラーに下記を追加

public $components = array('RequestHandler');

postメソッドの場合、function add(addアクション)が動作するので、function addで、下記のようにする。

public function add() {
    if ($this->request->is('post')) {
        $data = $this->request->input('json_decode');
        if($data){
            $this->log($data);
        }
    }
}
Pocket
LINEで送る


コメントください

関連記事

プログラミング

cakePHP2 – 多言語化

多言語化します。 cakephpマニュアルのこのページに説明が書いてあ 続きを読む …

プログラミング

Go言語によるビットコインのフルノード実装btcdを調べる(2)

btcdを実行した際のプログラムの流れを最初から確認してみます。 se 続きを読む …

%d人のブロガーが「いいね」をつけました。