一部で熱い支持を受けているWordPress のパフォーマンスをちょっとアップする Plugin Load Filter プラグインの Ver3.0 公開しました (^^♪
最近は YASAKANI Cache というキャッシュプラグインやグーグルフォトのアルバムを埋め込むサービスの開発を行っていたので全然更新していませんでした。
なんと1年ぶりの更新です
ときどき Plugin Load Filter をエゴサーチしているのですが、Contact Form 7 が機能しないという記事をいくつか見かけました
サイトを高速にする WordPress プラグイン Plugin Load Filter – FirstLayout
自分のサイトでは Contact Form 7 も使えていたので、特定の環境で何か問題があるのかなぐらいに思っていたのですが、自分のサイトでも再現しました (^_^;)
エラーの原因
調べてみるとどうも Contact Form 7 が REST API を使うようになってからの問題のようです。結構時間がたっています (^_^;)
Contact Form 7 から問い合わせを実行すると http://(site)/wp-json/contact-form-7/...
へリクエストが発行されますがこれを適正に処理できないケースがありました
固定ページを問い合わせページとしてそのページのみで contact form 7 プラグインを有効化していると contact form 7 からの wp-json というリクエストを固定ページへのリクエストと取り違えることで(ページフィルタで固定ページに対して contact form 7 が有効化されていない場合)このリクエストに対して contact form 7 がロードされず、そんな REST API のエンドポイントは知らないよということでエラーとなっているようでした
多くのプラグインで REST API のエンドポイントを登録して使われるようになると同様のことがたくさん発生しそう (^_^;)
これはいかんということで1年ぶりの更新です
URL フィルターによる対応
そもそも REST API って、WordPress のコアの機能と思っていたのですが、普通にいろいろなプラグインで活用されてきているようです
そこで、従来からベータ版として実装していた URL フィルタをちょっと改変して対応するのが一番やりやすそうだったので、URL フィルタに REST API, Ajax 用の専用の設定を設けることにしました
URLフィルタは、通常はすべて有効で使用しますが、 REST API、Heartbeat、Ajax、AMPページまたは任意のURLに対するリクエストに対して特別に停止したいプラグインがある場合に設定して使用します
REST API / Heartbeat / Ajax
REST API (wp-json) や Heartbeat/Ajax (admin-ajax) に対するリクエストに対して停止するプラグインを設定することが出来ます
通常は全て有効でOKですが、明らかに REST API や Ajax で使われないプラグインを停止することで管理画面での負荷を低減することが出来るかも知れません
wp-json や admin-ajax に対するリクエストに対してプラグインを停止させるかどうかを設定できるようにしたので、これで contact form 7 でも問題なく使えると思います
REST API で contact form 7 プラグインを停止させると ずっとクルクルが回り続けますが、有効化すれば正常に実行できることが確認できると思います
以上
contact form 7 で問題が出ている方は試してみて下さい m(__)m