我想在wordpress中创建一个用户,只能访问wordpress中的几个页面而不是其他任何东西,这个用户可以编辑,删除,更新和创建任何东西或者切换允许他只能访问任何页面的页面在wordpress中的其他东西,我尝试了很多插件,如: UAM用户访问管理器 按许可证核心 角色scoper 但他们不是根据我的需要或可能是我没有很好地使用它们。任何帮助,将不胜感激。我也试图通过后端的代码创建用户,但无法正确完成它请尽快提供任何相关的帮助: 我通过这个创造了角色:
$result = add_role(
'basic_contributor',
__( 'Basic Contributor' ),
array(
'read' => true, // true allows this capability
'edit_posts' => true,
'delete_posts' => false, // Use false to explicitly deny
)
);
if ( null !== $result ) {
echo 'Yay! New role created!';
}
else {
echo 'Oh... the basic_contributor role already exists.';
}
..............
function add_roles_on_plugin_activation() {
add_role( 'custom_role', 'Custom Subscriber', array( 'read' => true, 'level_0' => true ) );
}
register_activation_hook( __FILE__, 'add_roles_on_plugin_activation' );
但它对我帮助不大..
答案 0 :(得分:0)
我刚刚安装并试用了这个插件:https://wordpress.org/plugins/advanced-access-manager/。它应该为你做的伎俩。但是,如果你需要高级的东西,你可能需要付出一些代价。
在此插件中,转到“设置”(AAM),然后在“用户角色”区域中,按下要编辑的角色旁边的齿轮。然后导航到右侧的帖子或页面,再次按下齿轮图标并设置所需的权限。
如果您对自定义代码感兴趣,如果您不想使用插件,我可以提供一些方法 - 只需告诉我,我就可以详细说明如何操作。
编辑:这里有一些你可以放在page.php或single.php上的代码
在循环内部,仅限管理员,执行:
<?php
// First, specify only to check for permissions on certain pages/posts by ID
if(is_page(1,2,3)||is_post(4,5,2)) {
if(current_user_can( 'manage_options' )) { ?>
<!-- Here, all the the_title(), the_content(), etc should go -->
<h1><?php the_title(); ?></h1>
<?php } else {
echo 'Sorry, you don't have permission to view this page.'
}
} else { ?>
<!-- Display everything as normal -->
<h1><?php the_title(); ?></h1>
<?php } ?>
如果您要测试非管理员,请尝试'moderate_comments'
代表编辑,'publish_posts'
代表作者,'edit_posts'
代表贡献者,'read'
代表订阅者(这会进入current_user_can()
函数)。请参阅https://codex.wordpress.org/Roles_and_Capabilities。
答案 1 :(得分:0)
正如您在评论中所说,您希望禁用或限制特定帖子由您指定的某些用户访问。
这与用户功能无关,因为用户功能要么让用户看到wp-admin中的菜单,
要隐藏默认帖子类型的某些记录,您可以使用此方法:
这需要粘贴在functions.php页面
中
function id_WPSE_114111() {
global $my_admin_page;
$screen = get_current_screen();
global $post;
$id = $post->ID;
$user_id = get_current_user_id();
$blocked_users = get_field('blocked_users',$id);
//try to print $blocked_users here and get only the IDs of users in an array like below
foreach ($blocked_users as $b_key=>$b_val){
//check how to get ID by printing the $blocked_users above
$blocked_users[] = $b_val->ID;
}
//assuming that blocked users is an array of IDs
/*
$blocked_users = array(1,2,3,4);
*/
//then
if(in_array($user_id,$blocked_users)){
echo 'Not accessible !!'
return;
}
}
add_action( 'admin_notices', 'id_WPSE_114111' );
ACF字段设置