【问题标题】:bbpress user-roles or capabilities per forum每个论坛的 bbpress 用户角色或功能
【发布时间】:2018-08-30 17:29:40
【问题描述】:

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

问题

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

  • 用户A 无法访问论坛W
  • UserA 只能阅读 ForumX 中的主题和回复
  • UserA 可以在 ForumY 中创建主题并撰写回复
  • UserA 可以审核 ForumZ

插件

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

  • 终极会员,官方1.7和新2.0版本
    https://ultimatemember.com/
    他们声称他们正在开发 UltimateMember v2 的群组扩展,这在某种程度上看起来很有希望,但到目前为止还没有发布日期,我仍然不知道这个扩展是否能解决我的问题。

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

第一次尝试

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

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

  • ForumX 分配了以下组:ForumX_readersForumX_writersForumX_moderators

  • UserA 分配了以下组:ForumX_readersForumY_writersForumZ_moderators

但问题是,由于 UserA 属于具有 publish_repliesmoderate 功能的组,因此他可以完全访问 ForumX。

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

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

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

不幸的是,我无法在这部分代码中访问global $post$_GLOBALS['post']$_REQUEST[] 变量。既不是直接也不是使用apply_filters() 函数,我自己在代码的一部分中实现了。

更新: 我能够通过get_posts() 和当前论坛/主题的 slug 获得 ID。

所以,我的问题

我的第一次尝试有什么解决方案,我可能已经监督了吗?

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

或者这样的事情在 bbpress 中是不可能的吗?

【问题讨论】:

    标签: wordpress user-roles bbpress


    【解决方案1】:

    经过进一步的研究和反复试验,我终于弄明白了。

    要做的第一步是设置功能,在我的情况下看起来像这样。

    在插件目录中,有文件core/class-groups-user.phpinit_cache() 函数检索分配给用户的组,并设置相应的功能。

    为了避免过多使用核心插件,我对 $group_ids 变量应用了一个过滤器,该变量位于 line: 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-27
      • 2019-04-15
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多