You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BuddyPress群组新增子导航项点击出现404错误求助

问题描述
  • 用户端功能完全正常
  • 群组版本可正确移除现有标签并添加新标签,但点击新标签会跳转至404页面
  • 已在全新Docker部署的WordPress 6.5.4 + BuddyPress 12.5.0环境中复现,环境仅安装下述单文件插件,使用Twenty Twenty-Four主题
原测试插件代码
<?php
/*
Plugin Name: BuddyPress Group Test
Plugin URI: n/a
Description: Test adding group tab
Version: 0.0.1
Author: n/a
Author URI: n/a
License: AGPLv3
*/

add_action('bp_actions', function()
{   
    if(bp_is_group())
    {
        $group_slug = bp_get_current_group_slug();
        bp_core_remove_subnav_item("{$group_slug}_manage", 'group-avatar', 'groups');
    }
    else
    {
        bp_core_remove_subnav_item('profile', 'change-avatar', 'members');
    }
});

add_action('bp_setup_nav', function()
{
    $bp = buddypress();
    if(bp_is_group())
    {
        $group_slug = bp_get_current_group_slug();
        $tab = bp_core_new_subnav_item(
        [
            'name' => 'Change Group Photo', 
            'slug' => 'change-group-photo', 
            'parent_url' => trailingslashit(bp_get_group_permalink($group_slug)) . 'admin/', 
            'parent_slug' => "{$group_slug}_manage",
            'position' => 30,
            'screen_function' => function() use($group_slug)
            {
                bp_core_load_template(apply_filters('bp_core_template_plugin', 'groups/single/plugins'));
                add_action('bp_template_content', function()
                {
                    echo '<h1>GROUP</h1>';
                });
            },
        ]);
    }
    else
    {
        $tab = bp_core_new_subnav_item(
        [
            'name' => 'Change Profile Photo', 
            'slug' => 'change-profile-photo', 
            'parent_url' => trailingslashit($bp->loggedin_user->domain . $bp->profile->slug), 
            'parent_slug' => $bp->profile->slug,
            'position' => 30,
            'screen_function' => function()
            {
                bp_core_load_template(apply_filters('bp_core_template_plugin', 'members/single/plugins'));
                add_action('bp_template_content', function()
                {
                    echo '<h1>USER</h1>';
                });
            },
        ]);
    }
}, 10);
问题原因及修复方案

核心问题点

  1. 群组导航父slug错误:群组管理菜单的父slug固定为admin,而非{$group_slug}_manage,原代码错误使用动态生成的slug导致路由不匹配
  2. 群组链接参数错误:bp_get_group_permalink()需要传入群组对象/ID,而非群组slug,原参数传递错误导致URL生成异常
  3. 缺少权限控制:未限制群组新标签仅管理员可见,可能引发非管理员访问的权限问题

修复后的代码

<?php
/*
Plugin Name: BuddyPress Group Test
Plugin URI: n/a
Description: Test adding group tab
Version: 0.0.1
Author: n/a
Author URI: n/a
License: AGPLv3
*/

// 激活插件时刷新重写规则,确保路由生效
register_activation_hook(__FILE__, function() {
    flush_rewrite_rules();
});

add_action('bp_actions', function()
{   
    if(bp_is_group())
    {
        // 群组管理菜单的父slug是固定的'admin'
        bp_core_remove_subnav_item('admin', 'group-avatar', 'groups');
    }
    else
    {
        bp_core_remove_subnav_item('profile', 'change-avatar', 'members');
    }
});

add_action('bp_setup_nav', function()
{
    $bp = buddypress();
    if(bp_is_group())
    {
        $current_group = bp_get_current_group();
        if(!$current_group) return;

        $tab = bp_core_new_subnav_item(
        [
            'name' => 'Change Group Photo', 
            'slug' => 'change-group-photo', 
            'parent_url' => trailingslashit(bp_get_group_permalink($current_group)) . 'admin/', 
            'parent_slug' => 'admin', // 固定父slug为admin
            'position' => 30,
            'user_has_access' => bp_is_group_admin(), // 仅群组管理员可见
            'screen_function' => function()
            {
                bp_core_load_template(apply_filters('bp_core_template_plugin', 'groups/single/plugins'));
                add_action('bp_template_content', function()
                {
                    echo '<h1>GROUP</h1>';
                });
            },
        ]);
    }
    else
    {
        $tab = bp_core_new_subnav_item(
        [
            'name' => 'Change Profile Photo', 
            'slug' => 'change-profile-photo', 
            'parent_url' => trailingslashit($bp->loggedin_user->domain . $bp->profile->slug), 
            'parent_slug' => $bp->profile->slug,
            'position' => 30,
            'screen_function' => function()
            {
                bp_core_load_template(apply_filters('bp_core_template_plugin', 'members/single/plugins'));
                add_action('bp_template_content', function()
                {
                    echo '<h1>USER</h1>';
                });
            },
        ]);
    }
}, 10);

额外说明

  • 修复后需重新激活插件触发重写规则刷新,确保路由生效
  • 新增的user_has_access参数确保只有群组管理员能看到并访问该标签,符合BuddyPress的权限逻辑

内容的提问来源于stack exchange,提问作者user25453371

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 01:00:23