2026年8月1日

2026年8月1日

WordPressの編集者ロールの権限をカスタマイズする方法(追加・削除・専用ロール)

WordPress の「編集者」ロールの権限は、プラグインの User Role Editor や Members を使えば画面上で、WP-CLI なら wp cap add / wp cap remove で、コードなら WP_Role::add_cap() で変更できます。この記事では、編集者が標準で何をできるのかを整理したうえで、「メニューだけ触らせたい」「他人の記事は削除させたくない」といったよくある要望を、安全に実現する手順を説明します。

編集者ロールが標準で持っている権限

権限を変える前に、編集者がもともと何をできるかを把握しておきます。思い込みで「足りない」と判断し、不要な権限を足してしまう失敗が多いからです。たとえば編集者は、標準で投稿・固定ページの公開(publish_posts、publish_pages)ができ、他のユーザーの記事の編集・削除(edit_others_posts、delete_others_posts)もできます。

主な権限をまとめると次のとおりです。

  • 投稿・固定ページ:自分と他人の記事の作成・編集・公開・削除、非公開記事の閲覧
  • カテゴリー・タグ:作成・編集・削除(manage_categories)
  • コメント:承認・編集・削除(moderate_comments)
  • メディア:アップロード(upload_files)
  • HTML:unfiltered_html(単一サイトの場合。script タグなども含めて保存できる)

逆に、編集者が標準で持っていない代表的な権限は次のものです。

  • 外観:テーマ、ウィジェット、メニュー、カスタマイザー(edit_theme_options、switch_themes など)
  • プラグイン:インストール・有効化・編集(activate_plugins など)
  • ユーザー管理:一覧・作成・編集・削除(list_users、create_users、edit_users など)
  • 設定:設定画面全般(manage_options)

自分の環境の実際の権限は、WP-CLI で一覧表示できます。プラグインが権限を追加していることもあるので、変更前に一度出力して保存しておくと、元に戻すときの手がかりになります。

wp cap list editor > editor-caps-before.txt

方法1:プラグインで画面から変更する

コードを書かずに変えたい場合は、User Role Editor や Members が定番です。どちらもロールを選んで権限のチェックボックスを付け外しする画面を備え、ロールの複製(既存ロールを元に新しいロールを作る)にも対応しています。

プラグインを使う場合でも、変更内容はデータベースの wp_user_roles オプション(接頭辞が wp_ の場合)に保存されます。プラグインを削除しても権限の変更は残るため、「プラグインを消したら元に戻る」わけではない点に注意してください。

方法2:WP-CLI で追加・削除する

サーバーにSSHで入れるなら、WP-CLI が手早く、変更の記録も残しやすい方法です。

# 編集者にメニュー・ウィジェットの管理を許可する
wp cap add editor edit_theme_options

# 他人の公開済み記事・固定ページを削除させない
wp cap remove editor delete_others_posts delete_others_pages

# 確認
wp cap list editor | grep -E "theme_options|delete_others"

元に戻したいときは、wp role reset editor で編集者ロールを WordPress の初期状態に戻せます。ただし、他のプラグインが編集者に追加していた権限も消えるため、先ほど保存した一覧と見比べて、必要なものを付け直してください。

方法3:コードで変更する

テーマやプラグインの一部として配布したい、複数サイトで同じ設定にしたい、といった場合はコードで管理します。重要なのは、add_cap() や remove_cap() の結果はデータベースに保存されるということです。毎回のページ読み込み(init など)で実行すると、そのたびにオプションの書き込みが発生するため、プラグインの有効化時に1回だけ実行します。

<?php
/**
 * Plugin Name: Editor Role Tweaks
 * Description: 編集者ロールの権限を調整する(有効化時に1回だけ実行)。
 */

register_activation_hook( __FILE__, function () {
	$editor = get_role( 'editor' );
	if ( ! $editor ) {
		return;
	}
	$editor->add_cap( 'edit_theme_options' );
	$editor->remove_cap( 'delete_others_posts' );
	$editor->remove_cap( 'delete_others_pages' );
} );

register_deactivation_hook( __FILE__, function () {
	$editor = get_role( 'editor' );
	if ( ! $editor ) {
		return;
	}
	// 無効化したら標準の状態に戻す
	$editor->remove_cap( 'edit_theme_options' );
	$editor->add_cap( 'delete_others_posts' );
	$editor->add_cap( 'delete_others_pages' );
} );

編集者を直接いじらず「専用ロール」を作る

既存の編集者全員の権限を変えたくない場合は、編集者を複製した専用ロールを作るほうが安全です。WordPress の更新や他プラグインが標準ロールを前提にしていても影響を受けにくく、役割ごとに権限を分けられます。

register_activation_hook( __FILE__, function () {
	$editor = get_role( 'editor' );
	if ( ! $editor || get_role( 'chief_editor' ) ) {
		return;
	}
	$caps = $editor->capabilities;
	$caps['edit_theme_options'] = true;
	add_role( 'chief_editor', '編集長', $caps );
} );

作成したロールはユーザー編集画面の「権限グループ」から割り当てられます。ロールを削除するときは remove_role( 'chief_editor' ) を使いますが、そのロールのユーザーは権限のない状態になるため、先に別のロールへ移しておきます。

保存せずに条件付きで制限する

「自分が書いた記事以外は公開状態を変えさせない」のように、状況によって可否が変わるものはロールの権限では表せません。この場合は map_meta_cap フィルターや user_has_cap フィルターで、その場で判定します。これらはデータベースに保存されず、コードを外せば元の挙動に戻ります。

よくある要望と、付与するときの注意

メニューだけ編集させたい

外観のメニューを編集させるには edit_theme_options が必要です。ただしこの権限は、メニューだけでなくウィジェット、カスタマイザーでのテーマ設定、ブロックテーマのサイトエディター(テンプレートの編集)にも及びます。「メニュー以外は触らせたくない」場合、管理画面のメニュー項目を remove_submenu_page() で隠す方法がよく紹介されますが、これは表示を消すだけで、URL を直接開けば操作できてしまいます。権限の制御と画面の整理は別物として考えてください。

ユーザー管理を任せたい

edit_users などのユーザー管理権限を編集者に渡すと、単一サイトでは管理者アカウントのパスワードやメールアドレスまで変更できてしまうおそれがあります。promote_users があれば他人を管理者にすることもできます。どうしても必要な場合は、editable_roles フィルターで割り当てられるロールを制限し、管理者を編集対象から外す処理を合わせて入れてください。

unfiltered_html を外したい

外部のライターに編集者権限を渡す場合、unfiltered_html を外しておくと、記事に任意のスクリプトを埋め込まれるリスクを減らせます。サイト全体で無効にするなら、wp-config.php に define( 'DISALLOW_UNFILTERED_HTML', true ); を書く方法もあります。マルチサイトでは、この権限はもともと特権管理者だけが持っています。

変更後の確認方法

権限の変更は、実際の編集者アカウントで確かめるのが基本です。管理者のまま画面を見ても、管理者はすべての権限を持っているので違いが分かりません。テスト用の編集者ユーザーを作り、別のブラウザ(またはシークレットウィンドウ)でログインして、許可した操作ができること・外した操作ができないことの両方を確認します。

コマンドで判定結果だけを見たい場合は、wp eval で user_can() を呼び出せます。

wp eval 'var_dump( user_can( 5, "edit_theme_options" ) );'

5 の部分は確認したいユーザーの ID です。権限の変更は DB の書き換えなので、作業前にはデータベースのバックアップを取っておくと、想定外の結果になってもすぐに戻せます。なお、プラグインの画面表記や項目名は更新で変わることがあります(2026年10月現在の情報です)。

まとめ

  • 編集者は標準で公開・他人の記事の編集削除までできる。変更前に wp cap list editor で現状を保存する
  • 手軽さならプラグイン、記録と再現性なら WP-CLI、配布や複数サイトならコードを選ぶ
  • add_cap() / remove_cap() は DB に保存されるので、有効化時に1回だけ実行する
  • 既存の編集者を変えたくなければ、編集者を複製した専用ロールを作る
  • edit_theme_options や edit_users は影響範囲が広い。メニューを隠すのは権限制御ではない

お気軽にご相談ください

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