也许这不是最好的方法,因为它确实给了编辑器对设置和选项的访问权限,但它给了特定的编辑器(基于用户ID)编辑选项的权限。然后,我们测试是否正在加载一个选项模板,如果正在加载,并且用户id与我们授予的权限相同,则终止进程并弹出消息。
1) 所以,首先,创建您的SEO用户并为他分配一个编辑角色。
2) 接下来,我们需要让该用户能够manage_options
. 您可以通过编辑用户并查看URL来找到它,它应该是URL中最后的参数之一。
/** Give our SEO Guy Permissions **/
function give_seo_yoastToast() {
$user = new WP_User( $seo_user_id );
$user->add_cap( \'manage_options\');
}
add_action( \'admin_init\', \'give_seo_yoastToast\');
3) 现在,我们需要确保我们所有的SEO dudeski都不能访问任何关键选项。据我所知,以下页面是该用户编辑重要信息的唯一方式。如果他们确实查看了这些页面,我们会将其删除并发出消息,您可以随意更改消息。
/** Remove Access to Certain Pages **/
add_action( \'load-options-general.php\', \'prevent_seoguy_access\' );
add_action( \'load-options-writing.php\', \'prevent_seoguy_access\' );
add_action( \'load-options-reading.php\', \'prevent_seoguy_access\' );
add_action( \'load-options-discussion.php\', \'prevent_seoguy_access\' );
add_action( \'load-options-media.php\', \'prevent_seoguy_access\' );
add_action( \'load-options-permalink.php\', \'prevent_seoguy_access\' );
add_action( \'load-options.php\', \'prevent_seoguy_access\' );
function prevent_seoguy_access(){
$currID = is_user_logged_in() ? get_current_user_id() : 0;
if($currID == $seo_user_id ){
wp_die("There was a hole here once, it\'s gone now.");
exit();
}
}
4) 现在,他可以查看菜单中的页面,但当他访问这些页面时,他会看到上面的消息。作为额外的一步,让我们从菜单中删除此页面。请注意,如果您确实在没有上述功能的情况下删除了菜单页,那么精明的用户可以通过URL直接访问任何选项页。
/** Remove Settings Menu Page from SEO Guy **/
function seo_guy_menu() {
if(!current_user_can(\'administrator\')){
remove_menu_page(\'options-general.php\');
}
}
add_action(\'admin_menu\', \'seo_guy_menu\');
5) 你完了!
不幸的是,正如你在问题中指出的那样,Yoast似乎没有能力在不给用户不必要的额外权限的情况下为所有SEO内容授予特定于用户的权限,这太糟糕了。另一方面,你可以不使用静态$seo_user_id
改为创建一个SEO角色,同时授予该角色编辑器权限。这是一个多一点的工作(虽然不是太多),但如果你只有一个人做你的搜索引擎优化永远那么以上的方法是好的,我想。