我正在尝试设置具有扩展用户功能的 bbpress。
我的目标是用户需要在每个论坛中拥有不同的能力,即:
https://ultimatemember.com/
他们声称他们正在为 UltimateMember v2 开发一个群组扩展,这看起来很有希望,但到目前为止还没有发布日期,我仍然不知道这个扩展是否能解决我的问题。
http://docs.itthinx.com/document/groups/
允许我将多个组分配给用户和论坛,但仍然有一个问题。
所以,我尝试了这样的事情:
ForumX_readers
、
ForumX_writers
、
ForumX_moderators
ForumX_readers
、
ForumY_writers
、
ForumZ_moderators
publish_replies
和
moderate
能力的组,因此他拥有对 ForumX 的完全访问权限。所以我需要的是论坛组和用户组的交集 - 在这个例子中是
ForumX_readers
。有希望的部分,但是...
不幸的是,我无法访问这部分代码中的
global $post
、
$_GLOBALS['post']
和
$_REQUEST[]
变量。既不直接也不使用
apply_filters()
函数,我自己将其实现到代码部分中。更新: 我能够通过
get_posts()
获取 ID 以及当前论坛/主题的 slug。所以,我的问题
如果没有,是否有其他插件可以解决我不知道的问题?
或者类似的事情在 bbpress 中是不可能的吗?
要做的第一步是设置功能,在我的例子中看起来像这样。
在插件目录中,有文件
core/class-groups-user.php
。
init_cache()
函数检索分配给用户的组,并设置相应的功能。为了不让核心插件陷入太多混乱,我对
$group_ids
变量应用了一个过滤器,该变量可以在行:415中找到。
foreach( $user_groups as $user_group ) {
$group_ids[] = Groups_Utility::id( $user_group->group_id );
}
// added this line
$group_ids = apply_filters('filter_user_group_ids', $group_ids);`
然后我创建了一个新插件,它挂钩到这个过滤器。
add_filter('filter_user_group_ids', 'dnmc_filter_groups', 10, 1);
function dnmc_filter_groups($user_group_ids) {
$forum_id = dnmc_get_forum_id();
if(!$forum_id) return $user_group_ids;
$forum_group_ids = Groups_Post_Access::get_read_group_ids( $forum_id);
$user_restricted_forum_group_ids = array_intersect($user_group_ids, $forum_group_ids);
return $user_restricted_forum_group_ids;
}
function dnmc_get_forum_id() {
$args_topic = array(
'name' => basename( untrailingslashit( rtrim($_SERVER['REQUEST_URI'], '/') ) ),
'post_type' => 'topic',
'post_status' => 'publish',
'numberposts' => 1
);
if($topic = get_posts($args_topic)) {
return $topic[0]->post_parent;
}
$args_forum = array(
'name' => basename( untrailingslashit( rtrim($_SERVER['REQUEST_URI'], '/') ) ),
'post_type' => 'forum',
'post_status' => 'publish',
'numberposts' => 1
);
if($forum = get_posts($args_forum)) {
return $forum[0]->ID;
}
return false;
}