WP-Optimizeを削除したらWordPressに不具合? 不完全アンインストールの原因と解決策

「広告」

ブログ

画像WebP 化でサイト高速化のつもりが、思わぬ落とし穴にハマる

 画像のWebP化でサイト高速化を狙ったものの、WP-Optimize ではうまくいかず削除した途端に WordPress の挙動が不安定になり、WebP も正しく配信されないという想定外のトラブルが発生しました。本記事では、その原因となった“不完全アンインストール”の正体と、実際に行った解決手順を詳しく書き残します。

PageSpeed Insights でパフォーマンス測定

  Google が提供している無料の速度計測ツール「PageSpeed Insights」で当サイトをチェックすると、結果は次のようになった。

  • 携帯電話:パフォーマンス77(画像上)
  • デスクトップ:パフォーマンス95(画像下)

 モバイルの数値は悪くはないものの、最適化の余地はある。そして PageSpeed Insights からは、画像に対して次のような指摘も出ていた。

最新の画像形式(WebP、AVIF)を使用するか、画像の圧縮率を高くすると、この画像のダウンロード サイズが改善する可能性があります。


画像WebP 化プラグイン、WP-Optimize を入れてみる

 WordPress には、アップロードした画像を WebP 化して軽量化してくれるプラグインがいくつもある。中でも WP-Optimize は、

  • 画像圧縮
  • データベース最適化
  • キャッシュ
  • HTML/CSS/JS の圧縮

 など、多機能で人気が高いようだ。

 そこで WP-Optimize を導入してみたところ、キャッシュ機能は問題なく動作。しかし肝心の 画像の WebP 変換については、

  • 自動変換を有効にしても反応せず、手動変換のみしか動かない
  • 既存画像の WebP 変換は非常に遅い
  • 表示される画像が WebP ではなく 元画像(PNG) のまま

 という状態だった。

 画像が 元の PNG のまま表示されていることに、実はしばらく気づかなかった。
 基本的にこのあたりの仕組みはよく分かっていないので、「WebP に変換したはずだから、きっと大丈夫でしょ」と、根拠のない思い込みで完全に放置していたのである。

 しかし後日になって段々と気になり始め、「レスポンスヘッダで、表示中の画像が本当に WebP なのかを確認する」という、今さらすぎる基礎知識をようやく習得。おそるおそるレスポンスヘッダを確認してみたところ——

content-type: image/webp ではなく
content-type: image/png

 ……はい、完全に OUT!
 そこでようやく、「WebP 表示が全然できてなーい!」と気づいたわけである。


WebP Converter for Media も試してみる

 そこで、WP-Optimize の画像圧縮機能をOFFにし、代わりにこちらも有名な画像軽量化プラグイン WebP Converter for Media を導入した。

 しかしこちらも、

  • アップロード画像の自動 WebP 化はやはり動かない
  • WebP の自動表示も切り替わらない

 という状況で、やはり望む成果は出なかった。

 とはいえ、既存画像の変換スピードは非常に速いため、このプラグインは残し、WP-Optimize は 無効化 → 削除 することに。

 —— そして、ここから本当のトラブルが始まった。


WP-Optimize の削除で起きたエラーと、完全削除までの全手順

■発端:WP-Optimize 削除後、WordPress の挙動がおかしい

(Xserver 利用/WordPress)

 WP-Optimize をインストール後に無効化 → 削除を行ったものの、しばらくして サイト表示が重くなる不具合 が発生。しかも、このサイトだけでなく、同じサーバーで運用している他のサイト にも症状が波及した。
 XserverWebサイトトラブル診断で確認すると、以下の警告が表示される。

「使用中のバージョンで動作未確認」
「Webサイトに問題が見つかりました」

 さらに WordPress 側では、メディア関連ページを開くたびに次の PHP 警告が発生していた。

PHP Warning: Undefined array key “extension”
(wp-optimize/webp/class-wp-optimize-webp-images.php)

 本来であれば、プラグインは 無効化 → 削除 すれば影響が完全に消えるはず。しかし、WP-Optimize 削除後も WordPress が不安定なままという異常な状態が続いた。
 そして、FTP で確認すると、
 /wp-content/plugins/ 内には wp-optimize フォルダが存在しなかった
 つまりフォルダは削除されているが、動作は停止してない“形だけの削除”状態だった。

■ つまり、実際に起きていたこと

●原因:プラグイン「WP-Optimize」の不完全無効化・不完全アンインストール

 WordPress ダッシュボードで「無効化 → 削除」を行ったにもかかわらず、

  • 内部設定やフックだけが “有効化されたまま”残留
  • プラグイン本体フォルダはサーバー上に存在しない

 という、通常では起こらない状態になっていた。

 その結果、WordPress は 存在しないファイルを読み込もうとして PHP 警告を出し続けていた。

 このため、

  • Xserver の Webサイトトラブル診断でもエラー扱い
  • WordPress のメディア周りで不自然な挙動
  • サイト全体の動作が重くなる

 といった症状が連鎖的に発生していた。


■ なぜ「不完全アンインストール」が起きたのか?

  Webで情報を調べたところ、WordPress プラグインは “無効化→削除” を行っても、wp_options テーブル内の設定(オプション)が自動では消えず、そのまま残留してしまうことがある、と WordPress.org のフォーラムや StackExchange でもたびたび指摘されています。

 今回のケースのような「不完全アンインストール」が起こりやすい原因としては、以下が代表的です。

 ● 不完全アンインストールの主な原因

  • Xserver 側の書き込み制御で、ファイル削除が中断されることがある
  • ラグインのインストール/削除処理の途中でタイムアウトする
  • WP-Optimize 側が PHP バージョンに完全対応していないタイミングだった
  • プラグインの初期化・削除に必要な通信が途中で切れる
  • WordPress 内部の transients / options が壊れたまま残留する

参考になるWeb ページ(一般論としての資料)


■ 今回のケースに最も当てはまる事象

 WP-Optimize の WebP 機能部分(class-wp-optimize-webp-images.php)だけが設定として残存 し、

  • プラグイン本体は削除されている
  • だが WordPress が「まだ有効なプラグイン」として処理し続けた
  • 結果、存在しないフォルダ・ファイルを読み込もうとして Undefined array key エラーが発生

 という流れが最も自然に説明できる。

 つまり、WP-Optimize の WebP 関連の内部処理が壊れたまま、WordPress の内部に“ゴミ”として残り続けたことが原因。

 これにより、削除後も WordPress 全体の挙動が乱れ、他プラグインにも悪影響を与える「不完全アンインストール」が発生していたと考えられます。


■ 問題を整理するために実施した調査

① サーバー側:プラグインフォルダを確認

 まず FTP で以下のディレクトリを確認。

/wp-content/plugins/
(wp-optimize フォルダなし)

 → 不完全アンインストール確定。
 プラグイン本体がないのに、WordPress 側で“有効化の名残”だけ残っている可能性が高い。


② WordPress 側:データベースを調査

 サイトのDB 名が不明、さらにphpMyAdmin の接続情報を完全に忘れていたので、wp-config.php 内の表記を確認し、

  • DB 名
  • DB ユーザー
  • パスワード

 を再取得してログイン。

 そこで wp_options テーブルを検索しました。

検索条件

  • option_name LIKE ‘%optimize%’ → ヒットなし(=WP-Optimize の設定項目は消えている)
  • option_name LIKE ‘%wpo%’ “WP-Optimize の残骸”と思われる項目がヒット
  • option_name LIKE ‘%webp%’ → WebP Converter for Media が作った画像情報が大量にヒット

 特に WP-Optimize の残骸と思われる項目は。

_transient_timeout_wpo_minify_get_cached_files
_transient_wpo_minify_get_cached_files
_transient_timeout_wpo_get_current_db_size
_transient_wpo_get_current_db_size

 → プラグイン本体は無いのに、transients(WP の一時キャッシュ情報)だけが残っている状態。


③ エラーの原因をほぼ確定

  • プラグイン本体は存在しない
  • しかし WordPress は「有効化されている」と誤認したまま
  • DB 内に一部設定・transients が残存
  • WebP 関連のファイルを読み込もうとして PHP 警告が発生

 これは “不完全アンインストール”の典型的なパターンと一致。


■ 解決手順(実際に行った操作)

手順1)phpMyAdmin で active_plugins を修正

 WordPress の有効化プラグイン一覧は
 wp_options → option_name = active_plugins に格納されている。

 ここから wp-optimize の1行だけ削除

 → 「存在しないプラグインを読み込もうとする状態」が解消。


手順2)WP-Optimize の残骸 transients を確認

 wpo% で検索して、minify 関連のキャッシュ残骸が存在することを確認。

 transients は WordPress が自動削除するため、基本的に放置で問題なし。
(必要なら削除しても良い)


手順3)uploads / WebP 画像の確認

 uploads/年/月/ 内には WebP Converter for Media が生成したWebP画像が多数あったが、WP-Optimize とは無関係。
 → 削除不要。

※WebP が表示されない問題は別要因。


手順4)Xserver のサイト診断が全サイトで正常に戻る

 wp-optimize の“誤った有効化状態”を解除した直後、同アカウント内の他ドメインに出ていた診断エラーも全て消失。

 おそらく、

  • 同アカウント内のサイトで発生している PHP 警告
  • それを Xserver の診断ツールが横断的に拾っている可能性

 といった理由で、1サイトのエラーが他サイトにも影響していたように見える

(※仕様を断定はできませんが、実際にこの挙動が起きた)


■ 残っている問題:WebP が表示されない

 WebP Converter for Media は、

  • 手動変換 → 正常
  • 自動変換 → 動作しない
  • 変換済み WebP の表示 → されない

 という状態。

 → .htaccess の rewrite 設定が壊れている/優先順位がおかしい可能性 などを調査する必要あり。
 (これは別途対応予定)


■まとめ(要点)

  • WP-Optimize を削除した結果、「プラグイン本体が無いのに有効化されたまま」という壊れ方をした
  • DB には一部設定だけが残り、PHP が「存在しないファイル」を読みに行って警告発生
  • Xserver の診断ツールがアカウント単位でエラーを拾っている可能性があり、他サイトまで巻き込まれた
  • phpMyAdmin で active_plugins を手動編集 → 問題解決
  • FTP 側はフォルダ残骸なし
  • DB の transients は残っても害なし(自動で消える)

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