外观标签似乎根本不是一个选项,我可以这样做吗?
#1 楼
将此添加到主题的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' );
更新(建议在注释中):
您可能不应该对每个请求都这样做,因为AFAIK会导致db
写入。仅在
admin_init
上更好,且仅当!$role_object->has_cap('edit_theme_options')
#2 楼
编辑:针对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行是针对我的主题的主题。您可以通过在管理面板中单击要隐藏的子菜单来找到第二个参数。这样,您的URL将类似于:example.com/wp-admin/themes.php?page=yiw_panel 因此,在此示例中,
remove_submenu_page()
函数的第二个参数将是yiw_panel
评论
这也为管理员隐藏了主题等。
– JorgeLuisBorges
17年9月15日在12:05
#3 楼
在WordPress 3.8中,这比当前接受的答案更好。/**
* @var $roleObject WP_Role
*/
$roleObject = get_role( 'editor' );
if (!$roleObject->has_cap( 'edit_theme_options' ) ) {
$roleObject->add_cap( 'edit_theme_options' );
}
#4 楼
当我查看管理菜单结构时,似乎nav-menus.php
链接与功能edit_theme_options
相关联。您可以修改编辑者角色以包括此功能吗?这也将为他们提供编辑窗口小部件的选项,我不知道这是否有问题?所有菜单Ajax内容都受此功能限制,因此仅更改用于编辑菜单的管理菜单功能可能将不起作用。#5 楼
内置插件“用户角色编辑器”-开启edit_theme_options-安装插件Adminimize-为编辑器关闭“小部件”和“切换主题”;)#6 楼
到了2020年,WordPress现在已超过V5.3,所以我想我会提供一个更新的版本,其中该设置在主题激活后仅在数据库中保存一次-在主题激活时被删除。 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');
}
}
}
}
评论
get_role是一堂课吗?
–轻度绒毛
2011-2-24在13:31
@Mild Fuzz-本身不是,但它返回WP_Role的一个实例
–TheDeadMedic
2011年8月14日12:25
据我所知,您可能不应该对每个请求都执行此操作,因为这会导致数据库写入。最好在admin_init上使用,并且仅当!$ role_object-> has_cap('edit_theme_options')
– jsphpl
17年2月14日在9:14
此设置已保存到数据库(在表wp_options中的字段wp_user_roles中),因此最好在主题/插件激活时运行此设置。参见codex.wordpress.org/Function_Reference/add_cap
– Pim Schaaf
18年3月12日在16:46
或者您可以将其添加到functions.php中,运行一次,然后将其删除
– d79
19年1月16日在23:10