前提・実現したいこと
MW WP Form の送信時に、外部の API へ cURL POST を1回だけ行いたい。
完了画面の URL に cURL の返り値をパラメータ付与する必要があるので、
mwform_redirect_url フックで $Data->get_view_flg() が 'complete' の場合に処理を行うよう実装。
発生している問題・エラーメッセージ
MW WP Form 送信時に mwform_redirect_url フックが
($Data->get_view_flg() が 'complete' の状態で)
複数回(2〜3回)実行され、cURL POST で登録される情報が重複してしまう。
API への cURL POST による情報の送信および、
完了画面 URL へのパラメータ付与自体は成功しているので、
MW WP Form の mwform_redirect_url フックでの処理を1回だけにしたい。
該当のソースコード
functions.php 該当箇所(一部省略)
function send_api( $url, $Data ) { if ( $url && $Data->get_view_flg() == 'complete' ) { // ... 情報処理部分省略 ... // cURL POST $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_URL, $post_url); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data) ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $output = curl_exec($ch); curl_close($ch); // 戻り値を JSON オブジェクトに $json = json_decode($output, true); if (is_array($json) && $json["status"] == '200') { // 送信が成功していれば ID を URL に付与する $url = $url . '?id=' . $json["id"]; } else { // 送信が失敗した場合 $url = $url . '?status=' . $json["status"]; } } return $url; } add_action( 'mwform_redirect_url_mw-wp-form-123', 'send_api', 10, 2 );
試したこと
フラグをグローバル変数で用意し mwform_redirect_url の最初の実行だけ処理を行うように試しました。
たまに1回になるが、安定せず根本解決となりませんでした。
補足情報
この挙動が私の環境だけなのか、MW WP Form の仕様なのかも分かっていません。
心当たりのある方はアドバイスいただけましたら助かります。
よろしくお願いいたします。
あなたの回答
tips
プレビュー