編集者がメニューを編集できるようにしますか?


46

編集者にメニューを変更する権限を付与したいのですが、これはできますか?

外観タブはオプションではないようですが、そうすることはできますか?

回答:


53

これをあなたのテーマに追加してくださいfunctions.php

// add editor the privilege to edit theme

// get the the role object
$role_object = get_role( 'editor' );

// add $cap capability to this role object
$role_object->add_cap( 'edit_theme_options' );

1
get_roleはクラスですか?
マイルドファズ

4
@マイルドファズ-それ自体はありませんが、インスタンスを返しますWP_Role
-TheDeadMedic

8
私が理解している限り、これはdb書き込みを引き起こすので、おそらくすべてのリクエストでこれを行うべきではありません。上のより良いadmin_initとのみif !$role_object->has_cap('edit_theme_options')
jsphpl

この設定はデータベース(テーブルwp_options、フィールドwp_user_roles)に保存されるため、テーマ/プラグインのアクティベーションでこれを実行した方が良い場合があります。codex.wordpress.org/Function_Reference/add_cap
Pim Schaaf

または、functions.phpに追加し、一度実行してから削除することもできます
d79

18

編集:WP 4.9の更新とエディターのメニュー項目のみの非表示

ユーザーがナビゲーションメニューを変更できるようにしたいが、外観の他のオプションは変更できないようにする場合:これを使用します

// Do this only once. Can go anywhere inside your functions.php file
$role_object = get_role( 'editor' );
$role_object->add_cap( 'edit_theme_options' );

上記のコードはデータベースに永続的な変更を加えるため、管理パネルを更新した後、このコード全体をコメント化できます。

これで、外観の下にあるすべてのオプションがエディターに表示されます。次のような他のオプションを非表示にすることができます。

function hide_menu() {

    if (current_user_can('editor')) {

        remove_submenu_page( 'themes.php', 'themes.php' ); // hide the theme selection submenu
        remove_submenu_page( 'themes.php', 'widgets.php' ); // hide the widgets submenu
        remove_submenu_page( 'themes.php', 'customize.php?return=%2Fwp-admin%2Ftools.php' ); // hide the customizer submenu
        remove_submenu_page( 'themes.php', 'customize.php?return=%2Fwp-admin%2Ftools.php&autofocus%5Bcontrol%5D=background_image' ); // hide the background submenu


        // these are theme-specific. Can have other names or simply not exist in your current theme.
        remove_submenu_page( 'themes.php', 'yiw_panel' );
        remove_submenu_page( 'themes.php', 'custom-header' );
        remove_submenu_page( 'themes.php', 'custom-background' );
    }
}

add_action('admin_head', 'hide_menu');

hide_menu()関数の最後の3行は、私のテーマに固有のテーマです。管理パネルで非表示にするサブメニューをクリックすると、2番目のパラメーターを見つけることができます。URLは次のようになります:example.com/wp-admin/themes.php ?page= yiw_panel

したがって、この例では、remove_submenu_page()関数の2番目のパラメーターはyiw_panel


1
これにより、管理者にもテーマなどが隠されます。
JorgeLuisBorges

12

WordPress 3.8では、これは現在受け入れられている回答よりも優れたコードになります。

/**
 * @var $roleObject WP_Role
 */
$roleObject = get_role( 'editor' );
if (!$roleObject->has_cap( 'edit_theme_options' ) ) {
    $roleObject->add_cap( 'edit_theme_options' );
}

3

管理メニューの構造を見るとnav-menus.phpリンクが機能に関連付けられているようedit_theme_optionsです。この機能を含めるようにエディターの役割を変更できますか?これにより、ウィジェットを編集するオプション提供されますが、これが問題なのかわかりませんか?すべてのメニューAjaxのものはこの機能によって制限されているため、メニューを編集するために管理メニュー機能を変更するだけではおそらく機能しません。


3

instalプラグイン「ユーザーロールエディター」-edit_theme_optionsをオンにする-プラグインをインストールするAdminimize-エディターの「ウィジェット」と「テーマを切り替える」をオフにする;)


0

メニューがこのように機能することがわかりました。プラグイン「User Role Editor」をインストールすると、エディターロールなどの条件を編集できます。edit_theme_optionsをオンに切り替えます。しかし今:「テーマ」、「ウィジェット」の下に「メニュー」オプションが表示されます。私の場合:「メニュー」(エディタとして)をクリックした後、塗りつぶされたオプションは表示されませんが、空です。そのため、プラグイン「ユーザーロールエディター」を無効にし、「メニュー」の入力オプションが正しく表示されるようにしました。プラグイン「ユーザーロールエディター」を無効にすると、エディターがアクティブになる条件が維持されることに注意してください。私にとっては良いことかもしれません

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.