質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

1774閲覧

MW WP Form の mwform_redirect_url フックで cURL POST を行いたいが、複数回実行されるため POST が重複する

cowsoap

総合スコア1

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/05/18 08:20

前提・実現したいこと

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 の仕様なのかも分かっていません。
心当たりのある方はアドバイスいただけましたら助かります。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2020/05/18 20:27

どの部分が複数実行されているか特定できますか? HOOK が複数回呼び出されているのでしょうか? CURL によるアクセスのみが複数回実行されているのでしょうか?
cowsoap

2020/05/19 09:00

HOOK が複数回呼び出されています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問