2026年5月21日

2026年5月21日

WordPressのテーマ・プラグインファイルエディターを無効化する|DISALLOW_FILE_EDIT

WordPress の管理画面には、テーマやプラグインのファイル(PHP・CSS など)をブラウザーから直接書き換えられる「ファイルエディター」があります。便利な反面、管理者アカウントが乗っ取られると、この画面から任意の PHP コードを書き込まれ、サーバー上で実行されてしまいます。また、編集の誤りでサイトが表示されなくなることもあります。

wp-config.php に定数 DISALLOW_FILE_EDIT を1行加えると、このファイルエディターを管理者も含めて使えなくできます。この記事では、その設定方法と、効く範囲・効かない範囲、より強い DISALLOW_FILE_MODS との違いを説明します。内容は2026年10月時点の WordPress のソースコードに基づいています。

対象になるファイルエディター

画面 場所 中身
テーマファイルエディター 「外観」→「テーマファイルエディター」(ブロックテーマでは「ツール」→「テーマファイルエディター」) wp-admin/theme-editor.php
プラグインファイルエディター 「プラグイン」→「プラグインファイルエディター」 wp-admin/plugin-editor.php

wp-config.phpにDISALLOW_FILE_EDITを追加する

作業前に、wp-config.php のコピーを取っておきます。

cd /var/www/html
sudo cp -p wp-config.php wp-config.php.bak
sudo nano wp-config.php

wp-config.php の「編集が必要なのはここまでです」という行(英語版では That's all, stop editing!)より上に、次の1行を追加します。この行より下に書くと、WordPress の読み込みが始まったあとになり、効かないことがあります。

define( 'DISALLOW_FILE_EDIT', true );

WP-CLI が使える場合は、次のコマンドでも追加できます。--raw を付けると、true が文字列ではなく真偽値として書き込まれます。

wp config set DISALLOW_FILE_EDIT true --raw
wp config get DISALLOW_FILE_EDIT

wp-config.php は PHP のファイルなので、編集にはサーバーへの SSH・SFTP、またはレンタルサーバーのファイルマネージャーを使います。保存後にサイトが表示されなくなった場合は、行末のセミコロンや引用符の誤りを確認し、直せなければバックアップに戻します。

設定後に確認する

  • 管理画面のメニューから「テーマファイルエディター」と「プラグインファイルエディター」が消えている
  • https://example.com/wp-admin/theme-editor.php を直接開くと、権限が無い旨のメッセージが表示される

WP-CLI では、管理者ユーザーに編集の権限が無くなったことを確認できます(admin は自分の管理者ユーザー名に置き換えます)。

wp eval 'var_dump( current_user_can( "edit_plugins" ), current_user_can( "edit_themes" ) );' --user=admin
# bool(false) が2つ表示されれば無効になっている

効く範囲と効かない範囲

DISALLOW_FILE_EDIT が true のとき、WordPress は権限 edit_files・edit_plugins・edit_themes を、管理者を含むすべてのユーザーに対して拒否します。権限の判定で止めているので、メニューを隠すだけでなく、画面の URL を直接開いても使えません。

一方で、次の機能はこの設定の影響を受けません。

機能 DISALLOW_FILE_EDIT の影響
プラグイン・テーマのインストール、更新、削除 受けない(引き続き使える)
WordPress 本体の更新・自動更新 受けない
サイトエディター(ブロックテーマのテンプレート編集) 受けない。テンプレートはデータベースに保存され、権限 edit_theme_options で判定される
カスタマイザーの「追加 CSS」 受けない

つまり DISALLOW_FILE_EDIT は、「管理画面から PHP ファイルを書き換える」経路だけを閉じる設定です。管理者がプラグインをアップロードしてインストールすることはできるため、管理者アカウント自体の保護(強いパスワード、2段階認証、管理者の人数を絞る)と組み合わせて使います。

より強い制限: DISALLOW_FILE_MODS

DISALLOW_FILE_MODS を true にすると、ファイルエディターに加えて、管理画面からのプラグイン・テーマのインストール・更新・削除と、WordPress 本体の更新(自動更新を含む)もできなくなります。

define( 'DISALLOW_FILE_MODS', true );

この設定では、セキュリティ更新も管理画面からは適用されません。Git やデプロイの仕組みでファイルを配置しているなど、更新を別の方法で継続して回せる運用がある場合に使います。そうでなければ、DISALLOW_FILE_EDIT だけにしておくほうが、更新の遅れによる危険を避けられます。

コアファイルは編集しない

wp-admin/admin.php などの WordPress 本体のファイルに独自のチェックを書き加える方法は使わないでください。本体の更新で上書きされて消えるうえ、書き方を誤ると管理画面全体が使えなくなります。ファイルエディターの制限は、wp-config.php の定数で行うのが WordPress の用意した方法です。

あわせて行う wp-config.php の保護

ファイルエディターの無効化とは別に、wp-config.php 自体を守る設定も行っておくと安心です。wp-config.php は通常 PHP として実行されるため中身は表示されませんが、PHP が動かなくなったときなどに備えて、Web からの直接アクセスを拒否します。

Apache 2.4 の場合(WordPress のディレクトリの .htaccess):

<Files wp-config.php>
    Require all denied
</Files>

Nginx の場合(server ブロック内):

location = /wp-config.php {
    deny all;
}

Order Allow,Deny と Deny from all は Apache 2.2 の書き方です。Apache 2.4 では Require all denied を使います。

ファイルのパーミッションは、Web サーバーのユーザーが読める範囲でできるだけ狭くします(例: 440 や 400)。所有者やグループの構成によって読めなくなることがあるので、変更後にサイトが表示されることを確認してください。

テーマやプラグインを編集したいとき

ファイルエディターを無効にしたあとは、次の方法で編集します。

  • 子テーマを作り、手元のエディターで編集して SFTP でアップロードする(親テーマを直接編集すると、テーマの更新で変更が消える)
  • 検証環境(ステージング)で編集・確認してから本番に反映する
  • 小さな機能の追加は、テーマではなく独自のプラグインや mu-plugins に書く

まとめ

  • wp-config.php の「編集が必要なのはここまでです」より上に define( 'DISALLOW_FILE_EDIT', true ); を書く
  • 権限 edit_files・edit_plugins・edit_themes が全員に対して拒否され、テーマ・プラグインのファイルエディターが使えなくなる
  • プラグインのインストールや更新、サイトエディター、追加 CSS は引き続き使える
  • インストールや更新まで止める DISALLOW_FILE_MODS は、更新を別の方法で回せる場合だけ使う
  • コアファイル(wp-admin/admin.php など)は編集しない

関連記事:

お気軽にご相談ください

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