diff --git a/assets/admin/src/schema/sections/page-display/index.js b/assets/admin/src/schema/sections/page-display/index.js
index da591d97..20b2e71c 100644
--- a/assets/admin/src/schema/sections/page-display/index.js
+++ b/assets/admin/src/schema/sections/page-display/index.js
@@ -278,20 +278,20 @@ export const pageDisplaySchemas = {
key: 'page_display.user-home',
title: '用户主页',
icon: 'fas fa-user-circle',
- description: '配置用户公开主页的布局、Tab 展示和互动功能。',
+ description: '公开用户主页对齐 Zibll 作者页:通栏头图 + Tab 计数;交易/快捷入口仅在用户中心。',
defaults: {
- user_home_tabs: 'posts,comments,favorites,credits,product,plate,forum,follow',
- user_home_tabs_order: 'posts,comments,favorites,credits,product,plate,forum,follow',
+ user_home_tabs: 'posts,favorites,comments,follow',
+ user_home_tabs_order: 'posts,favorites,comments,follow',
user_home_tabs_pc_hide: '',
user_home_tabs_mobile_hide: '',
- user_home_sidebar: true,
+ user_home_sidebar: false,
user_home_cover: true,
user_home_follow: true,
user_home_posts_per_page: 10,
user_home_avatar: true,
user_home_name: true,
user_home_desc: true,
- user_home_stats: true,
+ user_home_stats: false,
user_home_social: true,
author_main_tab_swiper: false,
user_home_message: true,
@@ -305,7 +305,7 @@ export const pageDisplaySchemas = {
icon: 'fas fa-th-large',
fields: [
{ key: 'user_home_cover', label: '封面区域', type: 'switch', default: true, help: '用户主页顶部封面图' },
- { key: 'user_home_sidebar', label: '侧边栏', type: 'switch', default: true },
+ { key: 'user_home_sidebar', label: '侧边栏(已弃用)', type: 'switch', default: false, help: '公开主页为通栏布局(对齐 Zibll author);运行时强制关闭。交易服务请去用户中心。' },
{ key: 'user_home_follow', label: '关注按钮', type: 'switch', default: true },
{ key: 'user_home_posts_per_page', label: '每页文章数', type: 'number', default: 10, min: 5, max: 50 },
{ key: 'user_home_paging_ajax', label: 'AJAX 翻页', type: 'switch', default: true, help: '使用 AJAX 加载替代传统翻页' },
@@ -316,8 +316,8 @@ export const pageDisplaySchemas = {
title: 'Tab 配置',
icon: 'fas fa-columns',
fields: [
- { key: 'user_home_tabs', label: '显示的 Tab', type: 'input', default: 'posts,comments,favorites,credits,product,plate,forum,follow', help: '逗号分隔: posts, comments, favorites, credits, product, plate, forum, follow' },
- { key: 'user_home_tabs_order', label: 'Tab 显示顺序', type: 'input', default: 'posts,comments,favorites,credits,product,plate,forum,follow', help: '逗号分隔,拖拽排列栏目顺序' },
+ { key: 'user_home_tabs', label: '显示的 Tab', type: 'input', default: 'posts,favorites,comments,follow', help: '逗号分隔;默认 posts,favorites,comments,follow(粉丝)。可选 credits,product,plate,forum' },
+ { key: 'user_home_tabs_order', label: 'Tab 显示顺序', type: 'input', default: 'posts,favorites,comments,follow', help: '逗号分隔,控制栏目顺序' },
{ key: 'user_home_tabs_pc_hide', label: 'PC 端隐藏', type: 'input', default: '', help: '逗号分隔要在 PC 端隐藏的栏目' },
{ key: 'user_home_tabs_mobile_hide', label: '移动端隐藏', type: 'input', default: '', help: '逗号分隔要在移动端隐藏的栏目' },
{ key: 'author_main_tab_swiper', label: '移动端滑动切换', type: 'switch', default: false, help: '移动端左右滑动切换栏目' },
@@ -331,10 +331,10 @@ export const pageDisplaySchemas = {
{ key: 'user_home_avatar', label: '显示头像', type: 'switch', default: true },
{ key: 'user_home_name', label: '显示用户名', type: 'switch', default: true },
{ key: 'user_home_desc', label: '显示个人简介', type: 'switch', default: true },
- { key: 'user_home_stats', label: '显示统计数据', type: 'switch', default: true },
+ { key: 'user_home_stats', label: '显示统计数据(已弃用)', type: 'switch', default: false, help: '计数已并入 Tab 角标,头图内不再重复文章/评论/收藏。' },
{ key: 'user_home_social', label: '显示社交链接', type: 'switch', default: true },
- { key: 'user_home_message', label: '私信按钮', type: 'switch', default: true, help: '在用户主页显示发送私信按钮' },
- { key: 'user_home_private', label: '留言按钮', type: 'switch', default: true, help: '在用户主页显示留言入口' },
+ { key: 'user_home_message', label: '私信/消息按钮', type: 'switch', default: true, help: '本人显示消息中心入口;访客显示私信入口' },
+ { key: 'user_home_private', label: '留言按钮', type: 'switch', default: true, help: '预留开关,公开主页留言入口' },
],
},
],
diff --git a/assets/css/routes/user-home.css b/assets/css/routes/user-home.css
index 3fa38050..20770a4c 100644
--- a/assets/css/routes/user-home.css
+++ b/assets/css/routes/user-home.css
@@ -42,6 +42,34 @@
pointer-events: none;
}
+.aksrt-author-hero__cover-metas {
+ position: absolute;
+ right: 14px;
+ bottom: 12px;
+ z-index: 2;
+ display: flex;
+ align-items: center;
+ gap: 10px;
+}
+
+.aksrt-author-hero__cover-meta {
+ display: inline-flex;
+ align-items: center;
+ gap: 6px;
+ padding: 4px 10px;
+ border-radius: 999px;
+ font-size: 12px;
+ font-weight: 600;
+ color: #fff;
+ background: rgba(0, 0, 0, 0.35);
+ backdrop-filter: blur(4px);
+}
+
+.aksrt-author-hero__cover-meta i {
+ font-size: 11px;
+ opacity: 0.9;
+}
+
.aksrt-author-hero__body {
display: flex;
align-items: flex-start;
@@ -92,6 +120,7 @@
max-width: 520px;
}
+/* Body stats row removed for Zibll author parity; counts live in tabs. */
.aksrt-author-hero__stats {
display: flex;
flex-wrap: wrap;
@@ -543,3 +572,14 @@
margin-top: 16px;
text-align: center;
}
+
+
+/* Full-width public home (Zibll author: no commerce sidebar) */
+.aksrt-user-home .content-layout--no-sidebar .content-layout__primary {
+ width: 100%;
+ max-width: 100%;
+}
+
+.aksrt-user-home .dashboard-tabs__count.opacity8 {
+ opacity: 0.8;
+}
diff --git a/inc/classes/admin/schema/class-aksrt-admin-schema-page-display.php b/inc/classes/admin/schema/class-aksrt-admin-schema-page-display.php
index 62b78355..bf7c8a04 100644
--- a/inc/classes/admin/schema/class-aksrt-admin-schema-page-display.php
+++ b/inc/classes/admin/schema/class-aksrt-admin-schema-page-display.php
@@ -209,19 +209,19 @@ class AKSRT_Admin_Schema_Page_Display {
'user-home' => [
'key' => 'user-home',
'title' => '用户主页',
- 'version' => '1.0.0',
+ 'version' => '1.1.0',
'option_key' => 'aksrt_settings',
'groups' => [
['key' => 'layout', 'title' => '主页布局', 'fields' => [
['key' => 'user_home_cover', 'label' => '封面区域', 'type' => 'switch', 'default' => true],
- ['key' => 'user_home_sidebar', 'label' => '侧边栏', 'type' => 'switch', 'default' => true],
+ ['key' => 'user_home_sidebar', 'label' => '侧边栏(已弃用)', 'type' => 'switch', 'default' => false, 'help' => '公开主页对齐 Zibll 作者页为通栏布局;交易/快捷入口仅在用户中心展示。此开关保留兼容,运行时强制关闭。'],
['key' => 'user_home_follow', 'label' => '关注按钮', 'type' => 'switch', 'default' => true],
['key' => 'user_home_posts_per_page', 'label' => '每页文章数', 'type' => 'number', 'default' => 10, 'min' => 5, 'max' => 50],
['key' => 'user_home_paging_ajax', 'label' => 'AJAX 翻页', 'type' => 'switch', 'default' => true],
]],
['key' => 'tabs', 'title' => 'Tab 配置', 'fields' => [
- ['key' => 'user_home_tabs', 'label' => '显示的 Tab', 'type' => 'input', 'default' => 'posts,comments,favorites,credits,product,plate,forum,follow'],
- ['key' => 'user_home_tabs_order', 'label' => 'Tab 显示顺序', 'type' => 'input', 'default' => 'posts,comments,favorites,credits,product,plate,forum,follow'],
+ ['key' => 'user_home_tabs', 'label' => '显示的 Tab', 'type' => 'input', 'default' => 'posts,favorites,comments,follow', 'help' => '逗号分隔;默认对齐 Zibll:posts,favorites,comments,follow(粉丝)。可选 credits,product,plate,forum'],
+ ['key' => 'user_home_tabs_order', 'label' => 'Tab 显示顺序', 'type' => 'input', 'default' => 'posts,favorites,comments,follow'],
['key' => 'user_home_tabs_pc_hide', 'label' => 'PC 端隐藏', 'type' => 'input', 'default' => ''],
['key' => 'user_home_tabs_mobile_hide', 'label' => '移动端隐藏', 'type' => 'input', 'default' => ''],
['key' => 'author_main_tab_swiper', 'label' => '移动端滑动切换', 'type' => 'switch', 'default' => false],
@@ -230,9 +230,9 @@ class AKSRT_Admin_Schema_Page_Display {
['key' => 'user_home_avatar', 'label' => '显示头像', 'type' => 'switch', 'default' => true],
['key' => 'user_home_name', 'label' => '显示用户名', 'type' => 'switch', 'default' => true],
['key' => 'user_home_desc', 'label' => '显示个人简介', 'type' => 'switch', 'default' => true],
- ['key' => 'user_home_stats', 'label' => '显示统计数据', 'type' => 'switch', 'default' => true],
+ ['key' => 'user_home_stats', 'label' => '显示统计数据(已弃用)', 'type' => 'switch', 'default' => false, 'help' => '计数已并入 Tab 角标(对齐 Zibll),头图内不再重复展示文章/评论/收藏。'],
['key' => 'user_home_social', 'label' => '显示社交链接', 'type' => 'switch', 'default' => true],
- ['key' => 'user_home_message', 'label' => '私信按钮', 'type' => 'switch', 'default' => true],
+ ['key' => 'user_home_message', 'label' => '私信/消息按钮', 'type' => 'switch', 'default' => true],
['key' => 'user_home_private', 'label' => '留言按钮', 'type' => 'switch', 'default' => true],
]],
],
diff --git a/inc/classes/class-aksrt-user-home.php b/inc/classes/class-aksrt-user-home.php
index a5befaa9..e70c5438 100644
--- a/inc/classes/class-aksrt-user-home.php
+++ b/inc/classes/class-aksrt-user-home.php
@@ -72,7 +72,7 @@ class AKSRT_User_Home {
'priority' => 70,
],
'follow' => [
- 'label' => __('关注', 'aksrt'),
+ 'label' => __('粉丝', 'aksrt'),
'icon' => 'user-plus',
'priority' => 80,
],
diff --git a/inc/classes/settings/class-aksrt-settings-user-runtime.php b/inc/classes/settings/class-aksrt-settings-user-runtime.php
index 6ab8b859..bb92f9a8 100644
--- a/inc/classes/settings/class-aksrt-settings-user-runtime.php
+++ b/inc/classes/settings/class-aksrt-settings-user-runtime.php
@@ -31,9 +31,10 @@ class AKSRT_Settings_User_Runtime {
return $clean;
};
- $normalized_tabs = $parse_csv('user_home_tabs', 'posts,comments,favorites');
+ // Zibll author_main_tab_opt defaults: post, favorite, comment, plate, forum, follow.
+ $normalized_tabs = $parse_csv('user_home_tabs', 'posts,favorites,comments,follow');
if (empty($normalized_tabs)) {
- $normalized_tabs = ['posts', 'comments', 'favorites'];
+ $normalized_tabs = ['posts', 'favorites', 'comments', 'follow'];
}
$raw_order = $parse_csv('user_home_tabs_order', '');
@@ -57,14 +58,16 @@ class AKSRT_Settings_User_Runtime {
'tabs_order' => $ordered,
'tabs_pc_hide' => $pc_hide,
'tabs_mobile_hide' => $mobile_hide,
- 'sidebar' => !isset($settings['user_home_sidebar']) || !empty($settings['user_home_sidebar']),
+ // Public author page is full-width (Zibll author.php). Sidebar option kept as no-op reserved key.
+ 'sidebar' => false,
'cover' => !isset($settings['user_home_cover']) || !empty($settings['user_home_cover']),
'follow' => !isset($settings['user_home_follow']) || !empty($settings['user_home_follow']),
'posts_per_page' => max(5, min(50, (int) ($settings['user_home_posts_per_page'] ?? 10))),
'avatar' => !isset($settings['user_home_avatar']) || !empty($settings['user_home_avatar']),
'name' => !isset($settings['user_home_name']) || !empty($settings['user_home_name']),
'desc' => !isset($settings['user_home_desc']) || !empty($settings['user_home_desc']),
- 'stats' => !isset($settings['user_home_stats']) || !empty($settings['user_home_stats']),
+ // Body stats row removed; counts live in tabs like Zibll.
+ 'stats' => false,
'social' => !isset($settings['user_home_social']) || !empty($settings['user_home_social']),
'tab_swiper' => !empty($settings['author_main_tab_swiper']),
'message' => !isset($settings['user_home_message']) || !empty($settings['user_home_message']),
diff --git a/inc/helpers/aksrt-user-home.php b/inc/helpers/aksrt-user-home.php
index 7164ec15..e9f91c0e 100644
--- a/inc/helpers/aksrt-user-home.php
+++ b/inc/helpers/aksrt-user-home.php
@@ -27,8 +27,8 @@ if (!function_exists('aksrt_get_user_home_page_context')) {
$user_home_settings = class_exists('AKSRT_Settings')
? AKSRT_Settings::get_user_home_settings()
: [
- 'tabs' => ['posts', 'comments', 'favorites'],
- 'sidebar' => true,
+ 'tabs' => ['posts', 'favorites', 'comments', 'follow'],
+ 'sidebar' => false,
'cover' => true,
'follow' => true,
'posts_per_page' => 10,
@@ -89,7 +89,7 @@ if (!function_exists('aksrt_get_user_home_page_context')) {
$follow_count = 0;
if (class_exists('AKSRT_Follow')) {
- $follow_count = (int) AKSRT_Follow::get_instance()->get_following_count($user_id);
+ $follow_count = (int) AKSRT_Follow::get_instance()->get_follower_count($user_id);
}
$plate_count = 0;
@@ -136,7 +136,7 @@ if (!function_exists('aksrt_get_user_home_page_context')) {
'product' => __('商品', 'aksrt'),
'plate' => __('圈子', 'aksrt'),
'forum' => __('论坛', 'aksrt'),
- 'follow' => __('关注', 'aksrt'),
+ 'follow' => __('粉丝', 'aksrt'), // Zibll: 粉丝
];
foreach ($visible_tabs as $tab_key => $tab_config) {
if (!empty($tab_config['label'])) {
diff --git a/templates/pages/page-user-home.php b/templates/pages/page-user-home.php
index d47eb31c..ec4f523d 100644
--- a/templates/pages/page-user-home.php
+++ b/templates/pages/page-user-home.php
@@ -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';
-
-
-
diff --git a/templates/parts/user-home/panels-core.php b/templates/parts/user-home/panels-core.php
index ccc33ec4..685d7a2a 100644
--- a/templates/parts/user-home/panels-core.php
+++ b/templates/parts/user-home/panels-core.php
@@ -125,8 +125,8 @@ extract($args, EXTR_SKIP); // phpcs:ignore WordPress.PHP.DontExtract.extract_ext
diff --git a/templates/parts/user-home/sidebar.php b/templates/parts/user-home/sidebar.php
index 3a8dc8da..306a17c3 100644
--- a/templates/parts/user-home/sidebar.php
+++ b/templates/parts/user-home/sidebar.php
@@ -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
-
-?>
-
-
-
diff --git a/templates/parts/user/author-hero.php b/templates/parts/user/author-hero.php
index 82da9357..1ef93713 100644
--- a/templates/parts/user/author-hero.php
+++ b/templates/parts/user/author-hero.php
@@ -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)
+ : '';
?>
@@ -47,10 +65,19 @@ $is_own = !empty($dashboard['is_own_profile']);
src=""
alt="">
+ 0) : ?>
+
+
+
+
+
+
+
+
+
+
display_name); ?>
+
- description) : ?>
+ description) : ?>
description); ?>
@@ -87,22 +117,13 @@ $is_own = !empty($dashboard['is_own_profile']);
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
+
-
-
-
-
-
-
-