WordPressのウィジットが保存できない時の対処方法【WAF以外】

サイト運営

この記事は、Wordpressのカスタマイズをfunction.phpを変更して行っている際に、突然ウィジットが保存できなくなった時の対処方法をまとめています。

まず、私に起きたトラブルから説明します。

ウィジットが保存できないトラブルが起きた経緯

WordPressのカスタマイズに慣れてくると徐々にfunction.phpをいじる場面が増えてきます。カスタマイズに慣れてくるとfunction.phpをいじって自前のウィジットを追加したりするわけです。

殆どのウィジットは設定項目があり、ウィジット毎に初期値が決まっていて、ユーザーが変更できるようになっています。

調子に乗ってfunction.phpに追加した自前ウィジットをいろいろいじっていたら、ある日突然、その他のウィジットも含めて、ウィジットの設定を変更しても内容が保存されない状態になりました。

少し細かい話

今回起きたウィジットが保存できない、をもう少し具体的に言うと、

  • ウィジットをウィジットエリアに配置するところまではできる
  • ウィジット配置後にウィジットの設定値を変更し、保存をクリックした後に、再度ウィジットの設定画面を開くと初期状態に戻っている
  • 自前ウィジットだけじゃなく、他のウィジットも同じ現象が起きる
  • ウィジットの設定値が保存できるときもあったり、保存できないときもあったり不安定

というもので、特に最後は非常に厄介な現象が起きていました。

ウィジットが保存できない時の一般的な原因

その時色々ググって調べたのですが1ページ目に出てくるサイトは、ウィジットが保存できないのは大抵の場合はロリポップかMixHostを使っているケースで、サーバー側のWAFが影響しているという話ばかり。

WAFとはなにか?

WAFとは、Webサーバの前面に配置して通信を解析し、Webアプリケーションの脆弱性を突いた攻撃からWebサイトを守るためのセキュリティ対策です。ネットワークF/WやIPS/IDSでは対応できない攻撃を検知・遮断することができます。

そのWAFが悪さしているときに見られるWordpress上の現象は、以下のようなものです。

  • ウィジェット編集画面で保存ボタンをクリックしても更新が確定されない。
  • 読み込みインジゲーターがぐるぐる回るだけで進まない。

ちなみに、使用しているサーバーがロリポップやMixHostじゃないし、現象も違うので、あー自分には関係ないなコレと思いました。

通常、ロリポップやMixHostでこの現象が起きると、ウィジットをいじるときにサーバーのWAFをOFFにしないといけなくなります。ウィジットの変更が終わるとまたサーバーのWAFをONにしないといけないという大変面倒な作業が必要です。サーバーの管理画面って結構重いことがあるので、ログインしていちいち変更するのは結構面倒な作業だと思います。

WAF自体は悪いものではなく、セキュリティのために導入されているものですから、WAFがあるロリポップやMixHostが悪いサーバー会社というわけではなく、むしろセキュリティが強い、良いサーバー会社と考えるのが自然です。

最近ではXserverもWAFの導入を始めたことでも今後WAFが重要な技術であることはわかると思います。

ロリポップじゃないサーバーでウィジットが保存できない時の解決策

原因がWAFではないので自力で解決しなければならん状態だと思いました。

いくつか基本的なことを確認しました。

テーマの再インストール

テーマが壊れているかも?と、テーマを上書き再インストール。

⇒変化なし

テーマのバグなのでは?と思ってとりあえずアップデート

直近のアップデートの影響かも?と、アップデートする。

⇒変化なし

全てのpluginをOFFにする

あまり期待せず、定番の【pluginを全てOFF】にしてみました。

⇒変化なし

function.phpを少し前のバージョンに戻す

この時点で、function.phpに原因がありそうだと観念しました。

function.phpに自前のウィジットを追加していったときに、その記述の中にエラーにはならないけどウィジット全体に変な現象を起こす記述がどこかに紛れ込んでいると思いました。

と言っても、ローカルにデバッグ環境もなく、仕方ないのでオンラインでfunction.phpに記載した自前ウィジットをfunction.phpから順番に外していくと、ある部分を取り除くとウィジットが保存できるようになりました。

⇒解決!

まとめ

自前のウィジットをfunction.phpに記載して追加すると、ウィジットの設定値が保存できない現象が発生することがある。function.phpに記載ミスがあると通常画面が真っ白になる、今回のケースはそうならないので、気が付きにくいやっかいな不具合である。

その場合は、自分で追加したウィジットをひとつづつfunction.phpから削除していくことで原因の特定ができる。

 

タイトルとURLをコピーしました