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';