私は現在、WooCommerceフォローアップメールプラグインと忍者フォームプラグインの2つのWordpressプラグイン間の統合を理解しようとしています(最終目標は、忍者フォームの送信に対するアクションとして手動タイプのフォローアップメールテンプレートを送信できるようにすることです) )。価値のあるNinja Forms 3を使用しています。
Action クラスのオプションを定義するとき、テンプレートのリストをユーザーに提供します。これにより、ユーザーはアクションを定義するときに、送信するテンプレートを選択できるようになります。フォローアップ メール プラグインからメール テンプレートを取得するために、API クライアント、具体的にはメソッドを使用しています (これは、API URL の下get_emails()
のエンドポイントへの GET 呼び出しに変換されます)。/emails
問題は次のとおりです。ページが読み込まれるたびにninja_forms_register_actions
アクションが呼び出され、その間にアクション クラスがインスタンス化されます。通話中__construct
に、アクションの設定を入力します。そのために、Follow Up Emails API を呼び出します。これによりページの読み込みが開始され、その間にninja_forms_register_actions
アクションが呼び出されます...
この問題は予想していましたが、計画した解決策は役に立ちませんでした。つまり、トランジェントを使用して API 呼び出しの結果を保存することを計画していました。
private static function _get_templates()
{
error_log('_get_templates() started - ' . microtime(true));
if (false === ($templates = get_transient(self::TEMPLATE_TRANSIENT))) {
error_log('_get_templates() fetching - ' . microtime(true));
$fue_api = self::fue_api();
$templates = $fue_api->get_emails();
set_transient(self::TEMPLATE_TRANSIENT, $templates, self::TEMPLATE_TRANSIENT_EXPIRY);
error_log('_get_templates() fetched - ' . microtime(true));
}
error_log('_get_templates() done - ' . microtime(true));
return $templates;
}
ただし、ログの結果は次のとおりです。
[22-May-2016 23:53:33 UTC] _get_templates() started - 1463961213.692187
[22-May-2016 23:53:33 UTC] _get_templates() fetching - 1463961213.694222
[22-May-2016 23:53:34 UTC] _get_templates() started - 1463961214.05998
[22-May-2016 23:53:34 UTC] _get_templates() fetching - 1463961214.061054
[22-May-2016 23:53:38 UTC] _get_templates() started - 1463961218.660683
[22-May-2016 23:53:38 UTC] _get_templates() fetching - 1463961218.661265
[22-May-2016 23:53:40 UTC] _get_templates() started - 1463961220.772228
[22-May-2016 23:53:40 UTC] _get_templates() fetching - 1463961220.774142
[22-May-2016 23:53:41 UTC] _get_templates() started - 1463961221.150277
[22-May-2016 23:53:41 UTC] _get_templates() fetching - 1463961221.654757
[22-May-2016 23:53:45 UTC] _get_templates() started - 1463961225.306565
[22-May-2016 23:53:45 UTC] _get_templates() fetching - 1463961225.308898
[22-May-2016 23:53:46 UTC] _get_templates() started - 1463961226.281794
[22-May-2016 23:53:46 UTC] _get_templates() fetching - 1463961226.283803
これは、Web サーバー プロセスを強制終了するか、プラグイン フォルダーの削除/名前変更などの抜本的な処理を実行するまで続きます。この時点で、一時的なメッセージは HTTP エラー コードで満たされます (それ自体は驚くべきことではありません)。したがって、明らかに、トランジェントはリクエスト後まで設定されていないため、私の一時的なソリューションは機能しません。
このような状況では、 のチェックを追加しますがDOING_AJAX
、これは 2 つの理由で適合しません。Ninja Forms AJAX プロセスでこのデータを使用できるようにする必要があることと、DOING_AJAX が実際にここに設定されるかどうかもわかりません。 、FUE API は を使用しないためadmin-ajax.php
です。次のようなものに変更することを検討していました。
private static function _get_templates()
{
error_log('_get_templates() started - ' . microtime(true));
if (false === get_option(self::TEMPLATE_LOCK_OPTION, false) && false === ($templates = get_transient(self::TEMPLATE_TRANSIENT))) {
delete_option(self::TEMPLATE_LOCK_OPTION);
add_option(self::TEMPLATE_LOCK_OPTION, true, '', 'no');
error_log('_get_templates() fetching - ' . microtime(true));
$fue_api = self::fue_api();
$templates = $fue_api->get_emails();
delete_option(self::TEMPLATE_LOCK_OPTION);
set_transient(self::TEMPLATE_TRANSIENT, $templates, self::TEMPLATE_TRANSIENT_EXPIRY);
error_log('_get_templates() fetched - ' . microtime(true));
}
error_log('_get_templates() done - ' . microtime(true));
return $templates;
}
しかし、ロックとしてオプションを使用するのは汚いと間違っているように感じます。また、オブジェクト キャッシングが使用されている場合 (WPEngine など) には、エラーの余地があるように感じます。これに対処するためのより良い/通常の方法はありますか、それとも、上記に実際の問題はありませんか?
編集:したがって、ロック ソリューションも 100% 機能しません。WP Cron ジョブでこれを行うことになりました。10 分ごとに、必要に応じてではなく、テンプレートのリストを取得し、オプションに保存します。私はこの解決策が特に好きではありませんが、まだより良い解決策を思い付くことができませんでした。この問題の一般的な解決策があるかどうかにまだ興味があります。