几个月前,我为一位客户创建了一些类似的东西。我找不到任何能满足我当时需要的东西。它需要一些自定义代码(没有什么太疯狂的)。我将试着快速分析一下我是如何做到这一点的,以帮助您概述您需要做什么,以及您需要考虑的事情。
我还创建了用户组来集体管理组的访问,而不是单个用户,但您可以跳过这一部分,只关注没有组的用户。
重要提示:我决定将网站内容的访问级别分为3层,公共层、登录层和私有层。因此,在我的管理界面中,我会指定每个页面都是这三层中的一层。因此,现在我可以通过将主页和关于页面设置为public,让任何人都可以访问它,然后联系人页面只允许登录的任何人访问,最后可能是商店页面只允许特定用户组访问。
数据库我创建了3个表:
wp_user_groups
-- 这是用户组,刚刚id
, slug
和title
, 但这首歌和标题只是出于管理目的。wp_user_group_access
-- 这是数据透视表(group_id
, post_id
) 将组ID链接到的位置post_ids
(post_ids
= page_ids
).wp_user_user_group
-- 另一个枢轴talbe(group_id
, user_id
) 将用户链接到组。同样,如果您不打算使用组,您可以直接跳到只进行用户访问,在其中分配访问权限post_ids
直接发送给用户。页面访问级别——当时我决定将这些级别存储在包含帖子ID的wp\\U选项数组中,所以我有3个wp_options
, access_posts_public
, access_posts_logged_in
, 和access_posts_private
. 您仍然可以使用表,但在我的例子中,wp\\u选项更易于管理,并且工作良好。
管理UI(wp管理页面)
您需要创建一个小的管理界面,在这里可以创建组、向组中添加用户以及向组分配页面/帖子访问权限。
身份验证
现在需要检查是否允许用户访问请求的资源。对于我共同使用的(wp)函数,我发现template_redirect
动作钩对此效果最佳。
您应该做一些比这更干净的事情,比如设置一个身份验证类,但本质上是在您的函数中。php文件添加:
add_action( \'template_redirect\', custom_authentication );
function custom_authentication() {
//Authentication checks
}
然后,验证检查的顺序使其尽可能简单:首先检查页面/帖子id是否在access_posts_public
wp_option
, 如果是,return
(结束)函数
- 检查用户是否已登录,如果未登录,则将其重定向到登录或其他页面检查用户是否是管理员,如果是,我们可以
return
您可能不想阻止管理员查看页面 现在用户已登录,请检查页面是否位于access_posts_logged_in
wp_option
, 如果是,return
(结束)函数如果我们达到这一点,那么帖子/页面将设置为私有。然后检查用户是否在有权访问此帖子/页面的组中