2026年5月20日

2026年5月20日

WordPressのプラグインをデータベースから無効化する方法|phpMyAdminでactive_pluginsを編集

プラグインの不具合で管理画面に入れなくなったとき、有効なプラグインの一覧はデータベースの wp_options テーブルにある active_plugins という値に保存されています。これを書き換えると、管理画面を使わずにプラグインを無効化できます。この記事の内容は、2026年11月時点の WordPress 6.9 のソースコードで確認しています。

データベースを触る前に試せる方法

データベースの直接編集は、間違えると別の不具合を起こします。次の方法が使えるなら、そちらが簡単です。

使えるもの 方法
管理者のメール WordPress 5.2 以降は、重大なエラーが起きると管理者のメールアドレスに「リカバリーモード」のリンクが届きます。そのリンクからログインすると、原因のプラグインを止めた状態で管理画面を使えます
FTP・ファイルマネージャー wp-content/plugins/ の中の、原因のプラグインのフォルダー名を変える(例: plugin-name を plugin-name-off に)。WordPress はそのプラグインを読み込まなくなり、管理画面の「プラグイン」を開くと無効化されます
SSH と WP-CLI wp plugin deactivate プラグイン名、すべてなら wp plugin deactivate --all

FTP も SSH も使えず、レンタルサーバーの管理画面から phpMyAdmin だけが使える場合に、この記事の方法を使います。

1. バックアップを取る

phpMyAdmin で WordPress のデータベースを選び、「エクスポート」からデータベース全体を保存します。少なくとも wp_options テーブルだけは保存しておきます。

2. テーブルの接頭辞を確認する

テーブル名の wp_ は、インストール時に決めた接頭辞です。サーバーの簡単インストールでは別の文字列になっていることがあります。wp-config.php の次の行で確認します。

<?php
$table_prefix = 'wp_';

以下の SQL では wp_options と書いているので、接頭辞が違う場合は読み替えてください(例: wp8_options)。phpMyAdmin の左側のテーブル一覧でも確認できます。

3. 現在の値を確認して控える

phpMyAdmin の「SQL」タブで次を実行します。

SELECT option_value FROM wp_options WHERE option_name = 'active_plugins';

結果は PHP のシリアライズという形式で、たとえば次のようになっています。

a:3:{i:0;s:19:"akismet/akismet.php";i:1;s:36:"contact-form-7/wp-contact-form-7.php";i:2;s:20:"broken-plugin/me.php";}
部分 意味
a:3:{…} 要素が3つの配列
i:0; 0番目の要素
s:19:"akismet/akismet.php"; 19バイトの文字列(プラグインのフォルダー名とメインファイル)

後で元に戻せるように、この値をそのままテキストファイルに保存しておきます。

4. すべてのプラグインを無効化する

原因のプラグインが分からないときや、早く管理画面に入りたいときは、空の配列にします。

UPDATE wp_options
SET option_value = 'a:0:{}'
WHERE option_name = 'active_plugins';

これで管理画面に入れるようになったら、「プラグイン」の画面で1つずつ有効化し、どれで不具合が出るかを確かめます。原因が分かったら、そのプラグインの更新を待つか、代わりのプラグインを探します。

5. 1つのプラグインだけを無効化する

特定のプラグインだけを外す場合は、その要素を消し、配列の要素数を書き換えます。上の例から broken-plugin/me.php を外すと、次のようになります。

UPDATE wp_options
SET option_value = 'a:2:{i:0;s:19:"akismet/akismet.php";i:1;s:36:"contact-form-7/wp-contact-form-7.php";}'
WHERE option_name = 'active_plugins';

書き換えるときの決まり:

  • 先頭の a:3 を、残った要素の数(ここでは a:2)に変える
  • s: の後ろの数字は文字列のバイト数で、1文字でも合っていないと値全体が読み込めなくなる。残す要素は元の値からそのまま写す
  • 番号(i:0; など)は飛んでいても読み込めるが、そろえておくと確認しやすい

数え間違えると、すべてのプラグインが無効になったのと同じ状態になったり、WordPress が値を読めなくなったりします。自信がなければ、4 のすべて無効化を使ってください。

MySQL のコマンドで行う場合

SSH でサーバーに入れるが WP-CLI が無い場合は、mysql コマンドでも同じことができます。データベース名・ユーザー名は wp-config.php の DB_NAME・DB_USER で確認します。

mysql -u DBユーザー名 -p DB名
SELECT option_value FROM wp_options WHERE option_name = 'active_plugins'\G
UPDATE wp_options SET option_value = 'a:0:{}' WHERE option_name = 'active_plugins';

元に戻す

管理画面で1つずつ有効化し直すのが確実ですが、プラグインの数が多い場合は、手順 3 で控えた値をそのまま戻すこともできます。

UPDATE wp_options
SET option_value = 'ここに控えた値を貼る'
WHERE option_name = 'active_plugins';

戻した値に原因のプラグインが含まれていると、同じ不具合が再発します。

変更が反映されないとき

Redis や Memcached を使った永続オブジェクトキャッシュ(wp-content/object-cache.php がある構成)では、オプションの値がキャッシュから読まれるため、データベースを書き換えても反映されないことがあります。サーバーのキャッシュを消すか、object-cache.php の名前を一時的に変えてから確認します。

マルチサイトの場合

マルチサイトでは、プラグインの状態が2か所に保存されています。

  • ネットワークで有効化したプラグイン: wp_sitemeta テーブルの active_sitewide_plugins
  • 各サイトで有効化したプラグイン: サイトごとの options テーブル(2つ目のサイトなら wp_2_options)の active_plugins

active_sitewide_plugins は、プラグインのファイル名をキー、有効化した時刻を値にした配列で、active_plugins とは形が違います。すべて無効にする場合は同じく a:0:{} にします。

SELECT meta_value FROM wp_sitemeta WHERE meta_key = 'active_sitewide_plugins';

UPDATE wp_sitemeta SET meta_value = 'a:0:{}' WHERE meta_key = 'active_sitewide_plugins';

関連記事

お気軽にご相談ください

お見積りへ お問い合わせへ
▲