WordPressで、投稿などの編集をしていて、保存待ち状態のまま..終わらないから一旦画面を閉じて開きなおしたら、編集した部分がまったく反映されていなかった..という経験ありませんか?
私自身が遭遇したわけではないのですが、そうした相談を受けたので、原因と解決方法を考察してみました。
これについては、Autosaving never endsでも過去に議論されていますが解決には至っていないようです。
自動更新がいつまでたっても終わらない原因
最初はリビジョン数なのか?と疑ったのですが、リビジョンは「公開」「更新」「下書き保存」など、いわゆる更新処理を掛けた時に生成されるものなので、主たる原因としては考えにくいです。
そこで考えたのが、WordPressの機能である、自動保存。これは、投稿の編集画面を開いている間、約1分ごとに変更がないかを判断して、1つ前に戻ることができるようにするもので、例えば保存する前に誤って画面を閉じてしまったなどというケースで有用な機能です。
自動保存が効いた状態で編集画面が閉じられた時、次回同じ画面を開くと下図のように「以下のバージョンよりも新しい自動保存された投稿があります。..」という画面が表示されます。実際に見たことのある方も多いのではないでしょうか?

この機能は前述した通り、「自動」で行われるため、知らない間に処理され、通常であればすぐに終了して何事もなかったように編集を続けることができます。
ただ、現象が発生するケースをいろいろと考察していると、複数のユーザーで同じサイトに対して編集を行っている場合に起こる可能性が高いと思われます(実際に事象を1つ1つ検証したわけではなくあくまでもは肌感覚です)。
こう考える根拠として、WordPressのデータは、データベースに保存され、アクセス時や編集の更新時、そして自動保存時などごとに、データを読み込んだり、書き込んだりしています。
この時、企業などの業務ソフトなどで行っている処理と同様に、投稿の編集であれば必要なテーブルのロックとロック解除が繰り返されています。そうしないと、同時に同じデータに変更が加わった場合に処理できないからです。
これがどうにもならない状態になると、いわゆるデッドロックという状態になり、すべての業務が止まってしまうのですが、その前段階として、指示はしたけど結果が返ってこないというケース、これが自動保存が終わらないという現象として出るのではないかということです。
つまり、自分だけが編集しているサイトでは起こりにくいので、出る人(場合)もあれば、出ない人(場合)もあるのです(ひょっとすると同じ人が複数の投稿編集画面を同一ブラウザのタブで開いた場合で、たまたま処理が複数走って処理できなくなったというケースでも発生するかも知れません)。
余談ですが、テーマファイルエディターやプラグインファイルエディターで、稀に「何かがうまくいかなかったようです..」と出て、リロードしたら保存前のデータがなくなっていて、以降再度編集しなおして更新したら何の問題もなかった..という現象と同じような気がします。
また、その時のサーバーの処理状態にもよるので、出る時、出ない時がありますから、突然起こるという印象が強いのかも知れません。
自動更新が終わらない現象を防ぐ対処(例)
検索すると、自動更新が終わらなかったら、一旦すべてのブロックをコピーして画面を更新後、元に戻すというのが結構掲載されているのですが、自動更新が走っている最中にこの作業ができるのか?というのは、残念ながら自身で現象再現ができないので検証できていません。
ただ、自動更新と何かの処理が被った時に発生するきらいがあるのですし、そもそも自動更新のかかったものに戻すケースはそれほど多くはないと思いますので、以下のようにして自動更新の間隔を変えるのが妥当だと思います。
なお、この作業は、wp-config.phpというWordPressの要となるファイルを編集しますので、慣れていない方やトラブル対処できない方は避けた方がいいと思いますし、何か他の部分で影響があるかも知れないので、自己責任で対応ください。
自動更新の間隔を変更する方法
FTPクライアントツールでwp-config.phpを一旦ダウンロードします。
ダウンロードしたwp-config.phpを開きます。
下の方にある「/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */」と書かれている行の上へ以下のコードを挿入して保存します。
define('AUTOSAVE_INTERVAL', 3600);
保存したwp-config.phpを元の場所へアップロードし、正常に動作するかを確認します。
上記のコードは通常60秒(1分)ごとに行われる自動保存の間隔を3600秒(1時間)に変更するものです。値を変更することで自由にコントロールできます
サーバーのファイルマネージャーなどで直接記述の変更を行う方法もありますが、文字コードや自動翻訳などでファイルが壊れることがありますのでおすすめしません
補足として、この措置を行ったとしても完全に解決されることはないかも知れません。
というのは前述したように、編集画面とデータベースとの間のやり取りや、実際のデータの書き換え時に起こることが多いので、もしもたまたまその処理が複数走った場合にはやはり不具合が出る可能性があるからです。
また、ブラウザから自動更新を走らせた後のデータベースの処理自体はサーバーの性能や競合具合が大きく関わってきますから、あまりに頻発するようなら、より性能のよいサーバープランやサーバーへの乗り換えを考えてた方がいいかも知れません。
コメントを残す