WordPressサイトを運営していると、特定のユーザーに対して機能制限をかけたい場合があります。たとえば、管理者権限を持たないユーザーに固定ページの編集をさせたくない場合、メニューからその編集オプションを削除することで対応できます。本記事では、functions.phpファイルにコードを追加することで、管理者以外のユーザーに対して固定ページの編集を制限する方法を紹介します。
functions.phpファイルにコードを追加する
まず、テーマフォルダ内にあるfunctions.phpファイルを開き、以下のコードを追加します。このコードは、管理者権限を持たないユーザーに対して固定ページの編集メニューを非表示にします。
function remove_menu_pages_for_non_admins() {
// 現在のユーザーが管理者でない場合
if (!current_user_can('administrator')) {
// 固定ページの編集をメニューから削除
remove_menu_page('edit.php?post_type=page');
}
}
add_action('admin_menu', 'remove_menu_pages_for_non_admins', 999);
コードの動作を確認する
コードを保存したら、管理者以外のユーザーとしてログインし、メニューに固定ページの編集オプションが表示されていないことを確認してください。このコードによって、管理者以外のユーザーは固定ページの編集ができなくなります。
特定のユーザーロールに対して制限をかける
もし、特定のユーザーロールに対してのみ固定ページの編集を制限したい場合は、次のようにコードをカスタマイズします。
function remove_menu_pages_for_specific_roles() {
// 編集を制限するユーザーロールを配列で指定
$roles_to_restrict = ['editor', 'author'];
// 現在のユーザーのロールを取得
$user = wp_get_current_user();
// 指定されたロールが現在のユーザーのロールに含まれている場合
if (array_intersect($roles_to_restrict, $user->roles)) {
// 固定ページの編集をメニューから削除
remove_menu_page('edit.php?post_type=page');
}
}
add_action('admin_menu', 'remove_menu_pages_for_specific_roles', 999);
このコードでは、editorやauthorといったロールのユーザーに対してのみ固定ページの編集メニューを非表示にすることができます。
よくある質問(FAQ)
Q. 管理者以外のユーザーから管理画面メニューの固定ページ編集を削除するには?
A. admin_menuアクションでcurrent_user_can(‘manage_options’)をチェックし、管理者でない場合にremove_menu_page(‘edit.php?post_type=page’)を実行します。
Q. メニューを非表示にするだけでURLから直接アクセスされる危険はありますか?
A. remove_menu_page()はUIからのアクセスを隠すだけで、直接URLでのアクセスは防げません。ケイパビリティベースの権限制御(map_meta_capやuser_has_cap)と組み合わせて使う必要があります。
Q. エディターロールから投稿一覧のみ表示して固定ページは非表示にするには?
A. admin_menuフックでcurrent_user_can(‘edit_pages’)の代わりにロール名でチェックし、条件に一致する場合のみremove_menu_page()を呼び出します。ロール名での判定はget_user_role()的な実装または$user->rolesで確認します。
まとめ
管理者権限以外のユーザーが誤って固定ページを編集してしまうリスクを避けるために、メニューから編集オプションを削除することは有効な手段です。必要に応じて、特定のユーザーロールに対してのみこの制限を適用することもできます。今回紹介した方法を活用して、WordPressの管理画面をさらに安全かつ効率的に管理しましょう。