一、用户中心结构
B2 用户中心由 author.php 模板驱动,通过 get_query_var('b2_user_page') 判断当前子页(如 index、post、orders、collections、settings 等),并加载 User/对应名称.php 子模板。侧栏菜单与内容区分离,便于扩展。
二、新增一个用户中心子页
第 1 步:在子主题 functions.php 注册路由规则:
Text
<?php
add_filter( 'query_vars', function( $vars ) {
$vars[] = 'b2_user_page';
return $vars;
} );
add_action( 'init', function() {
add_rewrite_rule( '^author/([^/]+)/dl-log/?$', 'index.php?author=$matches[1]&b2_user_page=dl-log', 'top' );
} );
第 2 步:创建子模板 User/dl-log.php,输出页面内容。
第 3 步:在 author.php 侧栏菜单中添加入口链接:
Text
<div class="user-sidebar">
<div class="user-sidebar-info <?php echo $user_page === 'dl-log' ? 'active' : ''; ?>">
<a href="<?php echo esc_url( $link . '/dl-log' ); ?>" class="link-block"></a>
<p><?php echo b2_get_icon('b2-download-cloud-line b2-light b2-color') . __('下载记录','b2'); ?></p>
</div>
</div>
第 4 步:保存固定链接(后台-设置-固定链接,直接保存一次使规则生效)。
三、本人权限判断
Text
<?php
$user_id = (int) get_query_var( 'author' );
$me = (int) get_current_user_id();
if ( ! $me && function_exists( 'b2_get_current_user_id' ) ) {
$me = (int) b2_get_current_user_id();
}
$is_self = ( $me && $user_id && $me === $user_id );
四、用户中心等级进度优化
在用户中心显示等级升级进度,可以让用户更直观地看到成长情况。原理:读取用户当前积分与下一等级所需积分,计算百分比并渲染进度条。
Text
<?php
$lv = B2ModulesCommonUser::get_user_lv( $user_id );
// $lv 中包含当前等级、积分等数据,据此计算进度百分比
五、注意事项
1. 新增子页后一定要重新保存固定链接,否则路由不生效。
2. 侧栏菜单的高亮条件要与子页名称一致。
3. 涉及个人数据的页面务必做本人权限判断。

