基于组的路由和管理

时间:2017-02-18 作者:PeterTheLobster

客户要求其订购的网站使用基于组的导航和管理系统。每个小组有效地代表了公司中的一个部门,小组的数量将相当少。首先,我只想提到BuddyPress插件似乎并没有真正满足所有的要求。

Requirements:

  1. 每个组都分配了一个组经理,该经理可以创建内容(各种类型的帖子)
  2. example.com/group_name 将导致建立一个群组中心,在那里会有一些关于该群组的基本信息,一些加载该群组最新帖子的通用查询,以及一些与该群组严格相关的其他内容example.com/group_name/news 将导致一个查询页面,显示该组创建的最新新闻帖子(其他帖子类型也将有其查询页面)
  3. 该组经理只能为其组创建帖子,发布前必须经过总经理审核(可由某些用户角色解决)
  4. 帖子的url结构应为example.com/group_name/news/post_nameexample.com/group_name/aboutexample.com/news 您可以筛选出感兴趣的群体等

    First approach:

    我从创建自定义组分类法开始:

    register_taxonomy(
         \'groups\',
         [\'post\', \'user\'],
         [
            \'public\' => \'true\',
            \'labels\' => $labels,
            \'hierarchical\' => true,
            \'capabilities\' => [
                \'manage_terms\' => \'edit_users\',
                \'edit_terms\' => \'edit_users\',
                \'delete_terms\' => \'edit_users\',
                \'assign_terms\' => \'edit_users\',
            ]
        ]
    );
    
    然后我创建了一些基本的重写规则:

    $groups = get_terms([
        \'taxonomy\' => \'groups\',
        \'hide_empty\' => false
    ]);
    
    foreach ($groups as $group) {
        add_rewrite_rule($group->slug . \'/?$\', \'index.php?&pagename=group&groups=\' . $group->slug, \'top\');
    }
    
    add_rewrite_rule(\'([^/]*)/news/?$\', \'index.php?post_type=post&groups=$matches[1]\' , \'top\');
    add_rewrite_rule(\'([^/]*)/news/([^/]*)/?$\', \'index.php?groups=$matches[1]&name=$matches[2]&post_type=post\' , \'top\');
    
    和设置自定义链接创建:

    function __custom_post_link($link, $post, $leavename = true)
    {
        $terms = get_the_terms($post, \'groups\');
        if (!$terms) return $link;
        $term = $terms[0]->slug;
        if ($post->post_type == \'post\') {
            $link = str_replace($post->post_name, $term .\'/news/\' . $post->post_name, $link);
        } 
        return $link;
    }
    
    add_filter(\'post_type_link\', \'__custom_post_link\', 10, 3);
    
    但我在这里停了下来,因为我觉得使用自定义可能更好post_type 相反因为我必须在group hub页面上显示一些附加信息,所以我可能必须存储一些post meta信息。在我看来,使用自定义帖子类型来解决基本的路由问题会更容易example.com/group_name. 还可以将页面设置为自定义帖子的子级,对吗?如果是这样的话example.com/group_name/news.

    Question:当创建一个以一组具有上述要求的组为中心的系统时,您认为使用自定义分类法或自定义帖子类型更好吗?还是有更好的方法?

1 个回复
SO网友:Paul \'Sparrow Hawk\' Biron

我不明白你为什么不能多站点。在主站点上,您只需要switch_to_blog(), 从其中一个群博客获取内容,然后restore_current_blog().