fix(user-home): 1:1 align public profile with Zibll author page

- Remove 主页概览/快捷入口/交易服务 private-dashboard sidebar from public home
- Full-width layout; counts live in tab bar (粉丝 = followers)
- Hero: 用户中心/消息 for self, 关注/私信 for others; drop body stats row
- Defaults: no sidebar, posts/favorites/comments/follow tabs
This commit is contained in:
2026-07-15 16:18:17 +08:00
parent bbe010f5b8
commit 50e9e83f68
10 changed files with 157 additions and 153 deletions
+5 -4
View File
@@ -3,6 +3,7 @@
* Public user homepage template.
*
* Thin shell: resolve user → build context → mount parts.
* Layout matches Zibll author.php: full-width header + tabs (no commerce sidebar).
*
* @package AKSRT
*/
@@ -31,7 +32,7 @@ require_once AKSRT_DIR . '/templates/parts/user-shared-helpers.php';
<main id="main-content" class="site-main container content-shell content-shell--stream aksrt-user-home" tabindex="-1">
<div class="content-wrap">
<div class="content-layout<?php echo !empty($user_home_settings['sidebar']) ? '' : ' content-layout--no-sidebar'; ?> aksrt-user-home__layout">
<div class="content-layout content-layout--no-sidebar aksrt-user-home__layout">
<div class="content-layout__primary">
<?php
get_template_part('templates/parts/user/author-hero', null, [
@@ -39,6 +40,7 @@ require_once AKSRT_DIR . '/templates/parts/user-shared-helpers.php';
'dashboard' => $dashboard,
'user_home_settings' => $user_home_settings,
'is_author_page' => false,
'tab_counts' => $tab_counts ?? [],
]);
?>
@@ -52,10 +54,11 @@ require_once AKSRT_DIR . '/templates/parts/user-shared-helpers.php';
if (in_array($tab_key, $tabs_mobile_hide, true)) {
$tab_class .= ' tab-hide-mobile';
}
$tab_count = (int) ($tab_counts[$tab_key] ?? 0);
?>
<button type="button" class="<?php echo esc_attr(trim($tab_class)); ?>" data-tab="<?php echo esc_attr($tab_key); ?>" role="tab">
<?php echo esc_html($tab_labels[$tab_key] ?? ucfirst($tab_key)); ?>
<span class="dashboard-tabs__count"><?php echo esc_html((string) ($tab_counts[$tab_key] ?? 0)); ?></span>
<span class="dashboard-tabs__count opacity8"><?php echo esc_html((string) $tab_count); ?></span>
</button>
<?php endforeach; ?>
</div>
@@ -67,8 +70,6 @@ require_once AKSRT_DIR . '/templates/parts/user-shared-helpers.php';
?>
</div>
</div>
<?php get_template_part('templates/parts/user-home/sidebar', null, $ctx); ?>
</div>
</div>
</main>
+2 -2
View File
@@ -125,8 +125,8 @@ extract($args, EXTR_SKIP); // phpcs:ignore WordPress.PHP.DontExtract.extract_ext
<div class="user-home-balance-card">
<p class="user-home-balance-card__label"><?php echo esc_html(sprintf(__('当前%s余额', 'aksrt'), $currency_name)); ?></p>
<div class="user-home-balance-card__value"><?php echo esc_html(aksrt_format_credits($credit_balance)); ?></div>
<p class="user-home-balance-card__hint"><?php esc_html_e('完整账单和赚取/消费记录请在个人中心查看。', 'aksrt'); ?></p>
<a href="<?php echo esc_url(aksrt_get_user_center_url('credits')); ?>" class="btn-outline btn-sm"><?php esc_html_e('进入个人中心', 'aksrt'); ?></a>
<p class="user-home-balance-card__hint"><?php esc_html_e('完整账单和赚取/消费记录请在用户中心查看。', 'aksrt'); ?></p>
<a href="<?php echo esc_url(aksrt_get_user_center_url('credits')); ?>" class="btn-outline btn-sm"><?php esc_html_e('进入用户中心', 'aksrt'); ?></a>
</div>
</div>
<?php endif; ?>
+4 -80
View File
@@ -2,87 +2,11 @@
/**
* Public user home — page-owned sidebar.
*
* Zibll public author page has no private-dashboard sidebar
* (主页概览 / 快捷入口 / 交易服务). Those belong on 用户中心 only.
* This part is intentionally a no-op for 1:1 author parity.
*
* @package AKSRT
*/
defined('ABSPATH') || exit;
$args = is_array($args ?? null) ? $args : [];
extract($args, EXTR_SKIP); // phpcs:ignore WordPress.PHP.DontExtract.extract_extract
?>
<?php if (!empty($user_home_settings['sidebar'])) : ?>
<aside class="content-layout__aside sidebar uc-sidebar aksrt-user-home__aside" role="complementary" aria-label="<?php esc_attr_e('用户主页侧栏', 'aksrt'); ?>">
<div class="uc-sidebar__section">
<div class="uc-sidebar__title"><?php esc_html_e('主页概览', 'aksrt'); ?></div>
<div class="uc-stats">
<?php foreach ($enabled_tabs as $tab_key) : ?>
<a class="uc-stats__item" href="<?php echo esc_url(add_query_arg('tab', $tab_key, $home_url)); ?>">
<span class="uc-stats__value"><?php echo esc_html((string) ($tab_counts[$tab_key] ?? 0)); ?></span>
<span class="uc-stats__label"><?php echo esc_html($tab_labels[$tab_key] ?? ucfirst($tab_key)); ?></span>
</a>
<?php endforeach; ?>
</div>
</div>
<?php if (!empty($user_contacts) && !empty($user_center_settings['social_links'])) : ?>
<div class="uc-sidebar__section">
<div class="uc-sidebar__title"><?php esc_html_e('公开联系', 'aksrt'); ?></div>
<div class="aksrt-user-home__contacts">
<?php if (function_exists('aksrt_render_social_links')) : ?>
<?php aksrt_render_social_links($user_contacts); ?>
<?php endif; ?>
</div>
</div>
<?php endif; ?>
<div class="uc-sidebar__section">
<div class="uc-sidebar__title"><?php esc_html_e('快捷入口', 'aksrt'); ?></div>
<div class="uc-sidebar__buttons">
<a href="<?php echo esc_url($home_url); ?>" class="uc-sidebar__btn">
<i class="fas fa-user" aria-hidden="true"></i>
<span><?php esc_html_e('主页首页', 'aksrt'); ?></span>
</a>
<?php if ($is_own_profile) : ?>
<a href="<?php echo esc_url(aksrt_get_user_center_url()); ?>" class="uc-sidebar__btn">
<i class="fas fa-cog" aria-hidden="true"></i>
<span><?php esc_html_e('个人中心', 'aksrt'); ?></span>
</a>
<?php endif; ?>
</div>
</div>
<?php if ($is_own_profile) : ?>
<?php
$orders_url = function_exists('aksrt_get_orders_page_url') ? aksrt_get_orders_page_url() : '';
$show_vip = class_exists('AKSRT_Settings') && !empty(AKSRT_Settings::get_payment_vip_settings()['enabled']);
$credits_enabled_side = class_exists('AKSRT_Settings') && AKSRT_Settings::credits_enabled();
?>
<?php if ($orders_url || $show_vip || $credits_enabled_side) : ?>
<div class="uc-sidebar__section">
<div class="uc-sidebar__title"><?php esc_html_e('交易服务', 'aksrt'); ?></div>
<div class="uc-sidebar__buttons">
<?php if ($orders_url) : ?>
<a href="<?php echo esc_url($orders_url); ?>" class="uc-sidebar__btn">
<i class="fas fa-receipt" aria-hidden="true"></i>
<span><?php esc_html_e('我的订单', 'aksrt'); ?></span>
</a>
<?php endif; ?>
<?php if ($show_vip) : ?>
<a href="<?php echo esc_url(function_exists('aksrt_get_user_center_tab_url') ? aksrt_get_user_center_tab_url('credits') : aksrt_get_user_center_url('credits')); ?>" class="uc-sidebar__btn">
<i class="fas fa-crown" aria-hidden="true"></i>
<span><?php esc_html_e('VIP 会员', 'aksrt'); ?></span>
</a>
<?php endif; ?>
<?php if ($credits_enabled_side) : ?>
<a href="<?php echo esc_url(function_exists('aksrt_get_user_center_tab_url') ? aksrt_get_user_center_tab_url('credits') : aksrt_get_user_center_url('credits')); ?>" class="uc-sidebar__btn">
<i class="fas fa-coins" aria-hidden="true"></i>
<span><?php echo esc_html(AKSRT_Settings::get_currency_name()); ?></span>
</a>
<?php endif; ?>
</div>
</div>
<?php endif; ?>
<?php endif; ?>
</aside>
<?php endif; ?>
+77 -41
View File
@@ -2,11 +2,15 @@
/**
* Author Hero — shared hero section for author archive and public user homepage.
*
* Aligns with Zibll zib_author_header(): cover, avatar, name, identity, desc,
* and header actions. Content stats live in the tab bar, not a body stats row.
*
* Contract: get_template_part(..., null, $args)
* user WP_User
* dashboard array from aksrt_get_user_dashboard_view()
* user_home_settings array
* is_author_page bool
* tab_counts array (optional)
*
* @package AKSRT
*/
@@ -18,6 +22,7 @@ $user = $args['user'] ?? null;
$dashboard = is_array($args['dashboard'] ?? null) ? $args['dashboard'] : [];
$settings = is_array($args['user_home_settings'] ?? null) ? $args['user_home_settings'] : [];
$is_author = !empty($args['is_author_page']);
$tab_counts = is_array($args['tab_counts'] ?? null) ? $args['tab_counts'] : [];
if (!($user instanceof WP_User)) {
return;
@@ -25,12 +30,14 @@ if (!($user instanceof WP_User)) {
$user_id = (int) $user->ID;
$home_url = function_exists('aksrt_get_user_home_url') ? aksrt_get_user_home_url($user) : home_url('/');
$show_cover = !empty($settings['cover']);
$show_follow = !empty($settings['follow']);
$show_cover = !array_key_exists('cover', $settings) || !empty($settings['cover']);
$show_follow = !array_key_exists('follow', $settings) || !empty($settings['follow']);
$show_avatar = !array_key_exists('avatar', $settings) || !empty($settings['avatar']);
$show_name = !array_key_exists('name', $settings) || !empty($settings['name']);
$show_desc = !array_key_exists('desc', $settings) || !empty($settings['desc']);
$show_social = !array_key_exists('social', $settings) || !empty($settings['social']);
$show_message = !array_key_exists('message', $settings) || !empty($settings['message']);
$post_count = (int) ($dashboard['post_count'] ?? 0);
$comment_count = (int) ($dashboard['comment_count'] ?? 0);
$favorite_count = (int) ($dashboard['favorite_count'] ?? 0);
$contacts = $dashboard['user_contacts'] ?? [];
$social_on = !empty($dashboard['social_links_on']);
$signals = $dashboard['profile_signals'] ?? [];
@@ -38,6 +45,17 @@ $notice = $dashboard['profile_notice'] ?? null;
$show_report = !empty($dashboard['show_report']);
$bg_url = $dashboard['background_url'] ?? '';
$is_own = !empty($dashboard['is_own_profile']);
$follower_count = (int) ($tab_counts['follow'] ?? 0);
if ($follower_count <= 0 && class_exists('AKSRT_Follow')) {
$follower_count = (int) AKSRT_Follow::get_instance()->get_follower_count($user_id);
}
$pm_enabled = class_exists('AKSRT_Settings') && !empty(AKSRT_Settings::private_message_settings()['enabled']);
$messages_url = function_exists('aksrt_get_messages_page_url') ? aksrt_get_messages_page_url() : '';
$pm_url = ($pm_enabled && $messages_url !== '')
? add_query_arg('msg_type', 'conversation', $messages_url)
: '';
?>
<div class="aksrt-author-hero<?php echo $show_cover ? '' : ' aksrt-author-hero--no-cover'; ?>">
@@ -47,10 +65,19 @@ $is_own = !empty($dashboard['is_own_profile']);
src="<?php echo esc_url($bg_url ? $bg_url : get_theme_file_uri('assets/img/person_background.png')); ?>"
alt=""<?php echo function_exists('aksrt_lazy_loading') ? aksrt_lazy_loading('cover') : ' loading="lazy"'; ?>>
<div class="aksrt-author-hero__cover-mask"></div>
<?php if ($follower_count > 0) : ?>
<div class="aksrt-author-hero__cover-metas" aria-label="<?php esc_attr_e('主页数据', 'aksrt'); ?>">
<span class="aksrt-author-hero__cover-meta" title="<?php esc_attr_e('粉丝', 'aksrt'); ?>">
<i class="fas fa-heart" aria-hidden="true"></i>
<?php echo esc_html((string) $follower_count); ?>
</span>
</div>
<?php endif; ?>
</div>
<?php endif; ?>
<div class="aksrt-author-hero__body">
<?php if ($show_avatar) : ?>
<div class="aksrt-author-hero__avatar">
<?php
if (function_exists('aksrt_get_avatar_html')) {
@@ -60,8 +87,10 @@ $is_own = !empty($dashboard['is_own_profile']);
}
?>
</div>
<?php endif; ?>
<div class="aksrt-author-hero__info">
<?php if ($show_name) : ?>
<h1 class="aksrt-author-hero__name">
<?php echo esc_html($user->display_name); ?>
<?php
@@ -71,8 +100,9 @@ $is_own = !empty($dashboard['is_own_profile']);
}
?>
</h1>
<?php endif; ?>
<?php if ($user->description) : ?>
<?php if ($show_desc && $user->description) : ?>
<p class="aksrt-author-hero__desc"><?php echo esc_html($user->description); ?></p>
<?php endif; ?>
@@ -87,22 +117,13 @@ $is_own = !empty($dashboard['is_own_profile']);
</div>
<?php endif; ?>
<div class="aksrt-author-hero__stats">
<span class="aksrt-author-hero__stat">
<strong><?php echo esc_html((string) $post_count); ?></strong>
<span><?php esc_html_e('文章', 'aksrt'); ?></span>
</span>
<span class="aksrt-author-hero__stat">
<strong><?php echo esc_html((string) $comment_count); ?></strong>
<span><?php esc_html_e('评论', 'aksrt'); ?></span>
</span>
<span class="aksrt-author-hero__stat">
<strong><?php echo esc_html((string) $favorite_count); ?></strong>
<span><?php esc_html_e('收藏', 'aksrt'); ?></span>
</span>
<?php if (!empty($notice) && is_array($notice)) : ?>
<div class="aksrt-author-hero__notice aksrt-author-hero__notice--<?php echo esc_attr((string) ($notice['tone'] ?? 'muted')); ?>">
<?php echo esc_html((string) ($notice['message'] ?? '')); ?>
</div>
<?php endif; ?>
<?php if (!empty($contacts) && $social_on) : ?>
<?php if ($show_social && !empty($contacts) && $social_on) : ?>
<div class="aksrt-author-hero__contacts">
<?php if (function_exists('aksrt_render_social_links')) : ?>
<?php aksrt_render_social_links($contacts); ?>
@@ -113,21 +134,43 @@ $is_own = !empty($dashboard['is_own_profile']);
<div class="aksrt-author-hero__actions">
<?php if ($is_own) : ?>
<a href="<?php echo esc_url(aksrt_get_user_center_url()); ?>" class="btn-ghost btn-sm">
<i class="fas fa-cog" aria-hidden="true"></i>
<span><?php esc_html_e('个人中心', 'aksrt'); ?></span>
<a href="<?php echo esc_url(aksrt_get_user_center_url()); ?>" class="btn-primary btn-sm">
<i class="fas fa-user" aria-hidden="true"></i>
<span><?php esc_html_e('用户中心', 'aksrt'); ?></span>
</a>
<?php elseif ($show_follow) : ?>
<?php if (is_user_logged_in()) : ?>
<button type="button" class="btn-outline btn-sm aksrt-author-hero__follow-btn" data-aksrt-follow="<?php echo (int) $user_id; ?>" title="<?php esc_attr_e('关注该用户', 'aksrt'); ?>">
<i class="far fa-heart" aria-hidden="true"></i>
<span><?php esc_html_e('关注', 'aksrt'); ?></span>
</button>
<?php else : ?>
<a href="<?php echo esc_url(aksrt_get_login_url($home_url)); ?>" class="btn-outline btn-sm aksrt-author-hero__follow-btn">
<i class="far fa-heart" aria-hidden="true"></i>
<span><?php esc_html_e('登录后关注', 'aksrt'); ?></span>
</a>
<?php if ($show_message && $messages_url !== '') : ?>
<a href="<?php echo esc_url($messages_url); ?>" class="btn-ghost btn-sm">
<i class="fas fa-bell" aria-hidden="true"></i>
<span><?php esc_html_e('消息', 'aksrt'); ?></span>
</a>
<?php endif; ?>
<?php else : ?>
<?php if ($show_follow) : ?>
<?php if (is_user_logged_in()) : ?>
<button type="button" class="btn-outline btn-sm aksrt-author-hero__follow-btn" data-aksrt-follow="<?php echo (int) $user_id; ?>" title="<?php esc_attr_e('关注该用户', 'aksrt'); ?>">
<i class="far fa-heart" aria-hidden="true"></i>
<span><?php esc_html_e('关注', 'aksrt'); ?></span>
</button>
<?php else : ?>
<a href="<?php echo esc_url(aksrt_get_login_url($home_url)); ?>" class="btn-outline btn-sm aksrt-author-hero__follow-btn">
<i class="far fa-heart" aria-hidden="true"></i>
<span><?php esc_html_e('登录后关注', 'aksrt'); ?></span>
</a>
<?php endif; ?>
<?php endif; ?>
<?php if ($show_message && $pm_url !== '') : ?>
<?php if (is_user_logged_in()) : ?>
<a href="<?php echo esc_url($pm_url); ?>" class="btn-primary btn-sm">
<i class="fas fa-comment" aria-hidden="true"></i>
<span><?php esc_html_e('私信', 'aksrt'); ?></span>
</a>
<?php else : ?>
<a href="<?php echo esc_url(aksrt_get_login_url($home_url)); ?>" class="btn-primary btn-sm">
<i class="fas fa-comment" aria-hidden="true"></i>
<span><?php esc_html_e('私信', 'aksrt'); ?></span>
</a>
<?php endif; ?>
<?php endif; ?>
<?php endif; ?>
@@ -147,10 +190,3 @@ $is_own = !empty($dashboard['is_own_profile']);
</div>
</div>
</div>
<?php if (!empty($notice)) : ?>
<div class="aksrt-author-hero__notice aksrt-author-hero__notice--<?php echo esc_attr($notice['state']); ?>">
<i class="fas fa-exclamation-circle" aria-hidden="true"></i>
<span><?php echo esc_html($notice['text']); ?></span>
</div>
<?php endif; ?>