暂时授予“Manage_Options”功能

时间:2013-01-30 作者:AlxVallejo

为了允许编辑编辑编辑其他人的author meta(update\\u user\\u属性),我必须给他们“manage\\u options”功能,否则我会收到一条“作弊”消息。我只想在一个特定的编辑作者元页面上给他们这个功能。

我为“list\\u users”授予“editor”权限,以访问users admin表。在进入特定的作者元页面时,我授予“编辑器”权限以“管理\\u选项”。(我尝试将其放置在函数save\\u profile\\u字段的顶部,但仍然收到了死亡消息。)

我删除了save\\u profile\\u fields函数底部的“manage\\u options”功能。这是可行的,但是如果编辑器忽略了在author meta页上保存任何内容,那么编辑器将保留“manage\\u options”功能。

if( !current_user_can( \'manage_options\' ) && current_user_can( \'edit_others_posts\' ) ){
    $edit_editor_role = get_role( \'editor\' );
    $edit_editor_role->add_cap( \'manage_options\' );
}
在哪里可以从编辑器角色中删除“manage\\u options”功能?

$edit_editor_role = get_role( \'editor\' );
$edit_editor_role->remove_cap( \'manage_options\' );

1 个回复
SO网友:Simon

好问题!能力检查可能在加载过程的早期完成。通过查看/wp-admin/users.php 你可以看出,首先发生的事情之一是current_user_can( \'list_users\' ), 所以这显然是必要的,否则你会得到“作弊”呃警告但就在那之前,/wp-admin/admin.php 并且在该文件的底部,WordPress将为每个页面调用一个单独的操作,load-users.php 加载时wp-admin/users.php.

这意味着您应该能够设置一个函数,以添加在加载该页面期间执行任务所需的功能(当然,假设当前用户有足够的权限开始)。在“用户列表”和“用户编辑”页面上为用户提供新功能时,类似的操作可能会起作用:

function my_add_caps() {
    // add capabilities here
}
add_action(\'load-users.php\', \'my_add_caps\');
add_action(\'load-profile.php\', \'my_add_caps\'); // might be needed if you somehow cannot edit your own user
add_action(\'load-user-edit.php\', \'my_add_caps\');
不过,我不会太担心删除这些功能,一旦加载了页面,添加的功能就会发挥作用。但请记住,您可能必须为负责存储选项的管理页面或任何AJAX请求处理程序添加功能,这取决于WordPress在验证/存储选项期间执行的功能检查量。

结束

相关推荐

PHP致命错误:无法为wp-includes/capabilities.php中的非对象调用重载函数

我在apache日志中遇到了太多以下错误。PHP Fatal error: Cannot call overloaded function for non-object in wp-includes/capabilities.php on line 1187这是函数current\\u user\\u can($capability)的内部,第1187行如下所示:$current_user = wp_get_current_user(); 我不知道问题出在哪里?