WordPress案件を納品するとき、お客さん(サイト運営者)にどのようなユーザー権限を与えるだろうか?
私は編集者権限をお渡しすることが多い。お客さんは記事を書きつつ、たまに固定ページを編集するのがメインの作業となる。そういったふだんの作業をするには、操作できる項目が少ない編集者権限がよいと思う。ダッシュボードはシンプルになり、まちがった操作も減るだろう。
ダッシュボードのメニューで見ると、編集者権限では以下が表示されなくなる。
- 外観
- プラグイン
- ユーザー(かわりにプロフィール)
- 設定
管理者のダッシュボード
編集者のダッシュボードはメニュー少なめ
編集者権限にテーマオプション
今回は、テーマオプションにトップページの[ヘッダースライダー]がある。この画像だけ、お客さんが差し替えできるようにしたかった。
編集者権限にテーマオプションを与えるには、該当のテーマが選択されたときに edit_theme_options権限を与える。この設定はデータベースに保存されるため、テーマが有効化された after_switch_themeアクションで1回だけ行えばよい。
1 2 3 4 5 |
function my_after_switch_theme () { $role = get_role( 'editor' ); $role->add_cap( 'edit_theme_options' ); } add_action('after_switch_theme', 'my_after_switch_theme'); |
編集者に[外観]メニューが追加された。
テーマが無効化された際にはもとに戻しておく必要もある。
1 2 3 4 5 |
function my_switch_theme () { $role = get_role( 'editor' ); $role->remove_cap( 'edit_theme_options' ); } add_action('switch_theme', 'my_switch_theme'); |
[外観]メニューを消す
編集者権限で[外観]メニューが表示されるようになった。
とはいえ[外観]の中には、[ウィジェット][メニュー][ヘッダー]など、お客さんにはいじられたくない項目もある。やっぱり[外観]を消してしまいたい。
矛盾するようだけど…いったん[外観]を消してみた。
1 2 3 4 5 6 7 8 9 10 |
function my_admin_menu() { if( !current_user_can( 'administrator' )){ remove_menu_page( 'themes.php' ); remove_menu_page( 'edit-comments.php' ); remove_menu_page( 'tools.php' ); remove_submenu_page( 'index.php','update-core.php' ); } } add_action( 'admin_menu', 'my_admin_menu' ); |
ついでに[コメント][ツール][更新]メニューも、お客さんにクリックされるとややこしいので消した。
[テーマオプション]メニューを追加
[外観]メニューは消えたものの、先に権限は与えている。導線を貼れば編集者権限でテーマオプションをいじれるはずだ。前述と同じ admin_menuアクションを利用して、独自のメニューを追加する。
1 2 3 4 |
function my_admin_menu() { add_menu_page( 'テーマオプション', 'テーマオプション', 'editor', 'customize.php?return=%2Fwp-admin%2Findex.php'); } add_action( 'admin_menu', 'my_admin_menu' ); |
ダッシュボードに[テーマオプション]メニューが表示された。クリックすると、直接テーマのカスタマイズページに遷移する。手順も少ないほうがいい。
メニューやウィジェットがカスタマイズできないように
さて、[テーマオプション]メニューをクリックするとこの画面が表示されるようになった。
このなかにも、該当案件では不要な項目がある。
- サイト基本情報
- 色
- ヘッダー画像
- 背景画像
- ホームページ設定
- 追加CSS
削除しよう。
さらに、管理者権限以外はカスタマイズ不可にしたい項目もある。
- メニュー
- ウィジェト
これらを非表示にするには、customize_registerアクションを利用する。
項目はテーマによるが、だいたい以下のかんじ。
[メニュー]を非表示にする場合だけ少し方法が異なる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function my_customize_register_menu( $wp_customize ) { $wp_customize->remove_section( 'title_tagline' ); $wp_customize->remove_section( 'colors' ); $wp_customize->remove_control( 'header_image' ); $wp_customize->remove_section( 'static_front_page' ); $wp_customize->remove_section( 'background_image' ); $wp_customize->remove_section( 'custom_css' ); if( !current_user_can( 'administrator' )){ $wp_customize->remove_panel( "widgets" ); remove_action( 'customize_register', array( $wp_customize->nav_menus, 'customize_register' ), 11 ); } } add_action( 'customize_register', 'my_customize_register_menu' ); |
編集者権限でいじれるのは、テーマオプションの[ヘッダースライダー]のみとなった。
かなりスッキリした!