bbpress 每个论坛的用户角色或功能

问题描述 投票:0回答:1

我正在尝试设置具有扩展用户功能的 bbpress。

问题

我的目标是用户需要在每个论坛中拥有不同的能力,即:

  • 用户A无法访问论坛W
  • 用户A可以只能阅读ForumX中的主题和回复
  • 用户A可以在ForumY中创建主题并撰写回复
  • 用户A可以
  • 适度论坛Z
插件

这些是我到目前为止尝试过的插件,但没有成功:

  • 终极会员,官方1.7和全新2.0版本


    https://ultimatemember.com/ 他们声称他们正在为 UltimateMember v2 开发一个群组扩展,这看起来很有希望,但到目前为止还没有发布日期,我仍然不知道这个扩展是否能解决我的问题。

  • itthinx 群组插件


    http://docs.itthinx.com/document/groups/ 允许我将多个组分配给用户和论坛,但仍然有一个问题。

第一次尝试

由于 itthinx Groups 插件允许我将多个组分配给 UserA,这很棒,但它仍然没有解决我的问题。

所以,我尝试了这样的事情:

  • ForumX 分配了以下群组:

    ForumX_readers

    ForumX_writers
    ForumX_moderators

  • 用户A分配了以下组:

    ForumX_readers

    ForumY_writers
    ForumZ_moderators

但问题是,由于 UserA 属于具有

publish_replies

moderate
 能力的组,因此他拥有对 ForumX 的完全访问权限。

所以我需要的是论坛组和用户组的交集 - 在这个例子中是

ForumX_readers

有希望的部分,但是...

我深入研究了插件的代码,找到了根据用户分配的组来处理用户能力的行,并快速尝试获取当前的论坛组,以实现交集。

不幸的是,我无法访问这部分代码中的

global $post

$_GLOBALS['post']
$_REQUEST[]
 变量。既不直接也不使用 
apply_filters()
 函数,我自己将其实现到代码部分中。

更新: 我能够通过

get_posts()

 获取 ID 以及当前论坛/主题的 slug。

所以,我的问题

我可能已经监督过的第一次尝试有任何解决方案吗?

如果没有,是否有其他插件可以解决我不知道的问题?

或者类似的事情在 bbpress 中是不可能的吗?

php wordpress user-roles bbpress
1个回答
1
投票
经过进一步的研究和反复试验,我终于弄清楚了。

要做的第一步是设置功能,在我的例子中看起来像这样。

在插件目录中,有文件

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; }
    
© www.soinside.com 2019 - 2024. All rights reserved.