編集者がメニューを編集できるようにしますか?
7 回答
- 投票
-
- 2011-02-24
これをテーマの
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' );
add this to your theme's
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' );
-
get_roleはクラスですか?is get_role a class?
- 1
- 2011-02-24
- Mild Fuzz
-
@Mild Fuzz-それ自体はいいえではありませんが、 `WP_Role`のインスタンスを返します@Mild Fuzz - not itself no, but it returns an instance of `WP_Role`
- 4
- 2011-08-14
- TheDeadMedic
-
私が理解している限り、これによりdb書き込みが発生するため、すべての要求でこれを行うべきではありません.`admin_init`の方が良く、`if!$ role_object-> has_cap( 'edit_theme_options') `You probably shouldn't do this on every request, as this causes a db write as far as i understood. Better on `admin_init` and only `if !$role_object->has_cap('edit_theme_options')`
- 9
- 2017-02-14
- jsphpl
-
この設定はデータベース(テーブルwp_options、フィールドwp_user_roles)に保存されるため、テーマ/プラグインのアクティブ化時にこれを実行する方がよい場合があります.https://codex.wordpress.org/Function_Reference/add_capを参照してくださいThis setting is saved to the database (in table wp_options, field wp_user_roles), so it might be better to run this on theme/plugin activation. See https://codex.wordpress.org/Function_Reference/add_cap
- 0
- 2018-03-12
- Pim Schaaf
-
または、functions.phpに追加し、一度実行してから削除することもできますOr you could add it to functions.php, run it once and then remove it
- 0
- 2019-01-16
- d79
-
- 2013-04-16
編集: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
EDIT: update for WP 4.9 & only hiding menu items for Editor
If you want your users to be able to change the navigation menu, but not the other options under appearance: use this
// Do this only once. Can go anywhere inside your functions.php file $role_object = get_role( 'editor' ); $role_object->add_cap( 'edit_theme_options' );
You can comment out this entire code after you have refreshed your admin panel, because the above code will make persistent changes to the database.
You now have all the options under appearance visible to the editors. You can hide the other options like so:
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');
The last 3 lines in the
hide_menu()
function are theme specific for my theme. You can find the second parameter by clicking on the submenu you want to hide, in the admin panel. Your URL will then be something like: example.com/wp-admin/themes.php?page=yiw_panelSo, in this example, the second parameter for the
remove_submenu_page()
function will beyiw_panel
-
これにより、管理者のテーマなども非表示になります.this hides themes etc for admins too.
- 1
- 2017-09-15
- JorgeLuisBorges
-
- 2014-01-09
WordPress 3.8では、これは現在受け入れられている回答よりも優れたコードになります.
/** * @var $roleObject WP_Role */ $roleObject = get_role( 'editor' ); if (!$roleObject->has_cap( 'edit_theme_options' ) ) { $roleObject->add_cap( 'edit_theme_options' ); }
In WordPress 3.8, this would be better code than the current accepted answer.
/** * @var $roleObject WP_Role */ $roleObject = get_role( 'editor' ); if (!$roleObject->has_cap( 'edit_theme_options' ) ) { $roleObject->add_cap( 'edit_theme_options' ); }
-
- 2010-11-17
管理メニューの構造を見ると、
nav-menus.php
リンクは、機能edit_theme_options
に関連付けられています.この機能を含めるように編集者の役割を変更できますか?これにより、ウィジェットを編集するオプションも提供されます、これが問題かどうかわかりませんか?すべてのメニューAjaxのものはこの機能によって制限されているため、メニューを編集するための管理メニュー機能を変更するだけではおそらく機能しません. When I look at the admin menu structure, it seems the
nav-menus.php
link is tied to the capabilityedit_theme_options
. Can you modify the editor role to include this capability? This would also give them the option to edit widgets, I don't know whether this is a problem? All the menu Ajax stuff is restricted by this capability, so just changing the admin menu capability for editing menus will probably not work. -
-
- 2011-01-05
メニューが次のように機能することがわかりました:インストールプラグイン "ユーザーロールエディター "で、エディターロールなどの条件を編集することもできます.edit_theme_optionsをオンに切り替えます.しかし今:「テーマ」、「ウィジェット」の下に「メニュー」オプションが表示されます. 私の場合:(エディターとして)「メニュー」をクリックした後、入力されたオプションは表示されませんが、空になります.したがって、プラグイン「User Role Editor」を非アクティブ化すると、「menu」の入力済みオプションが正しく表示されます.プラグイン「UserRoleEditor」を非アクティブ化すると、エディターがアクティブになるための条件が維持されることに注意してください.私にとって良いことです、多分それはあなたにも役立つでしょう
I´ve found, that your menu will work this way: instal plugin "User Role Editor" and there you can edit condition for editor role and other too. Switch edit_theme_options ON. But now: you will see "menu" -option under "themes", "widgets". For me: After click to "menu" (as editor) I´d not see filled options but empty. So I´d deactivate plugin "User Role Editor" and filled options for "menu" appears correctly. Note that deactivating plugin "User Role Editor" remains conditions for editor active! Good for me, maybe it will help you too
-
- 2020-03-30
2020年、WordPressはV5.3を過ぎたので、テーマのアクティブ化時に設定がデータベースに1回だけ保存され、テーマの非アクティブ化時に削除される更新バージョンを提供すると思いました.
function add_theme_caps(){ global $pagenow; // gets the author role $role = get_role('editor'); if ('themes.php' == $pagenow && isset($_GET['activated'])) { // Test if theme is activated // Theme is activated // This only works, because it accesses the class instance. // would allow the editor to edit the theme options $role->add_cap('edit_theme_options'); } else { // Theme is deactivated // Remove the capability when theme is deactivated $role->remove_cap('edit_theme_options'); } } add_action( 'load-themes.php', 'add_theme_caps' );
私もOOPスタイルでコーディングすることを好むので、これはOOPバージョンです:
/** * YourClient Class * * @author John Doe * @package YourClient * @since 1.0 */ if (!defined('ABSPATH')) { exit; } if (!class_exists('YourClient')) { /** * The main YourClient class */ class YourClient { /** * Setup class */ public function __construct() { // Give more privileges on Theme Activation add_action('load-themes.php', array($this, 'add_theme_caps')); } function add_theme_caps() { global $pagenow; // gets the author role $role = get_role('editor'); if ('themes.php' == $pagenow && isset($_GET['activated'])) { // Test if theme is activated // Theme is activated // This only works, because it accesses the class instance. // would allow the author to edit others' posts for current theme only $role->add_cap('edit_theme_options'); } else { // Theme is deactivated // Remove the capability when theme is deactivated $role->remove_cap('edit_theme_options'); } } } }
It's 2020, WordPress is now past V5.3 so i thought i would contribute an updated version in which the setting is saved only once in the database - upon theme activation, and removed when the theme is desactivated.
function add_theme_caps(){ global $pagenow; // gets the author role $role = get_role('editor'); if ('themes.php' == $pagenow && isset($_GET['activated'])) { // Test if theme is activated // Theme is activated // This only works, because it accesses the class instance. // would allow the editor to edit the theme options $role->add_cap('edit_theme_options'); } else { // Theme is deactivated // Remove the capability when theme is deactivated $role->remove_cap('edit_theme_options'); } } add_action( 'load-themes.php', 'add_theme_caps' );
I also prefer to code in an OOP style so this is an OOP version:
/** * YourClient Class * * @author John Doe * @package YourClient * @since 1.0 */ if (!defined('ABSPATH')) { exit; } if (!class_exists('YourClient')) { /** * The main YourClient class */ class YourClient { /** * Setup class */ public function __construct() { // Give more privileges on Theme Activation add_action('load-themes.php', array($this, 'add_theme_caps')); } function add_theme_caps() { global $pagenow; // gets the author role $role = get_role('editor'); if ('themes.php' == $pagenow && isset($_GET['activated'])) { // Test if theme is activated // Theme is activated // This only works, because it accesses the class instance. // would allow the author to edit others' posts for current theme only $role->add_cap('edit_theme_options'); } else { // Theme is deactivated // Remove the capability when theme is deactivated $role->remove_cap('edit_theme_options'); } } } }
編集者にメニューを変更する権限を付与できるようにしたいのですが、これは可能ですか?
[外観]タブはオプションのようには見えませんが、オプションにすることはできますか?