diff --git a/assets/css/frontend/forum/extras/reply-action-buttons.css b/assets/css/frontend/forum/extras/reply-action-buttons.css index 67678f9d..d196c3d1 100644 --- a/assets/css/frontend/forum/extras/reply-action-buttons.css +++ b/assets/css/frontend/forum/extras/reply-action-buttons.css @@ -19,135 +19,6 @@ color: var(--c-primary, #1890ff); } -/* ── §7.9 Forum user page tabs ── */ - -.uh-forum__subtabs { - display: flex; - gap: 4px; - margin-bottom: 16px; - padding-bottom: 12px; - border-bottom: 1px solid var(--c-border, #e8e8e8); -} - -.uh-forum__subtab { - display: inline-flex; - align-items: center; - gap: 4px; - padding: 6px 14px; - border-radius: var(--radius-pill, 999px); - font-size: 13px; - color: var(--c-text-3, #999); - text-decoration: none; - transition: all .2s; -} - -.uh-forum__subtab:hover { - color: var(--c-text-1, #333); - background: var(--c-fill-1, #f5f5f5); -} - -.uh-forum__subtab.is-active { - background: var(--c-primary, #1890ff); - color: #fff; -} - -.uh-forum__subtab-count { - font-size: 11px; - opacity: .7; -} - -.uh-forum__list { - display: flex; - flex-direction: column; -} - -.uh-forum__item { - padding: 12px 0; - border-bottom: 1px solid var(--c-border-light, #f5f5f5); -} - -.uh-forum__item:last-child { - border-bottom: none; -} - -.uh-forum__item-title { - display: block; - font-size: 15px; - font-weight: 500; - color: var(--c-text-1, #333); - text-decoration: none; - margin-bottom: 4px; -} - -.uh-forum__item-title:hover { - color: var(--c-primary, #1890ff); -} - -.uh-forum__item-meta { - display: flex; - gap: 12px; - font-size: 12px; - color: var(--c-text-3, #999); -} - -.uh-forum__item-meta i { - margin-right: 3px; -} - -.uh-forum__section-title { - font-size: 14px; - font-weight: 600; - color: var(--c-text-2, #666); - margin: 16px 0 10px; - padding-bottom: 6px; - border-bottom: 1px solid var(--c-border-light, #f5f5f5); -} - -.uh-forum__section-title i { - margin-right: 4px; - font-size: 13px; -} - -.uh-forum__plate-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); - gap: 10px; - margin-bottom: 16px; -} - -.uh-forum__plate-card { - display: block; - padding: 12px; - border: 1px solid var(--c-border, #e8e8e8); - border-radius: var(--radius, 6px); - text-decoration: none; - transition: border-color .2s, box-shadow .2s; -} - -.uh-forum__plate-card:hover { - border-color: var(--c-primary, #1890ff); - box-shadow: 0 2px 8px rgba(0, 0, 0, .06); -} - -.uh-forum__plate-name { - font-size: 14px; - font-weight: 600; - color: var(--c-text-1, #333); - margin-bottom: 6px; -} - -.uh-forum__plate-stats { - display: flex; - gap: 10px; - font-size: 12px; - color: var(--c-text-3, #999); -} - -.uh-forum__pagination { - margin-top: 16px; - text-align: center; -} - /* ── §7.3 Hidden content block [aksrt_hide] ── */ .aksrt-forum-hide { diff --git a/assets/css/routes/user-home.css b/assets/css/routes/user-home.css index 1b2886e9..b93879e8 100644 --- a/assets/css/routes/user-home.css +++ b/assets/css/routes/user-home.css @@ -559,36 +559,130 @@ } } - -.aksrt-user-home .uh-forum__section-head { - display: flex; - align-items: flex-start; - justify-content: space-between; - gap: 16px; - margin-bottom: 18px; - padding-bottom: 14px; - border-bottom: 1px solid var(--color-line-soft, rgba(0,0,0,0.06)); +/* User-home forum tab (owned by public user home route) */ +.aksrt-user-home .uh-forum__subtabs { + display: flex; + gap: 4px; + margin-bottom: 16px; + padding-bottom: 12px; + border-bottom: 1px solid var(--c-border, #e8e8e8); } -.aksrt-user-home .uh-forum__section-title-main { - margin: 0 0 6px; - font-size: 20px; - color: var(--color-ink); +.aksrt-user-home .uh-forum__subtab { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 6px 14px; + border-radius: var(--radius-pill, 999px); + font-size: 13px; + color: var(--c-text-3, #999); + text-decoration: none; + transition: all .2s; } -.aksrt-user-home .uh-forum__section-desc { - margin: 0; - color: var(--color-ink-3); - font-size: 13px; +.aksrt-user-home .uh-forum__subtab:hover { + color: var(--c-text-1, #333); + background: var(--c-fill-1, #f5f5f5); } -.aksrt-user-home .uh-forum__section-link { - display: inline-flex; - align-items: center; - gap: 6px; - padding: 8px 14px; - border-radius: 999px; - background: var(--surface-2); - color: var(--color-ink-2); - text-decoration: none; +.aksrt-user-home .uh-forum__subtab.is-active { + background: var(--c-primary, #1890ff); + color: #fff; +} + +.aksrt-user-home .uh-forum__subtab-count { + font-size: 11px; + opacity: .7; +} + +.aksrt-user-home .uh-forum__list { + display: flex; + flex-direction: column; +} + +.aksrt-user-home .uh-forum__item { + padding: 12px 0; + border-bottom: 1px solid var(--c-border-light, #f5f5f5); +} + +.aksrt-user-home .uh-forum__item:last-child { + border-bottom: none; +} + +.aksrt-user-home .uh-forum__item-title { + display: block; + font-size: 15px; + font-weight: 500; + color: var(--c-text-1, #333); + text-decoration: none; + margin-bottom: 4px; +} + +.aksrt-user-home .uh-forum__item-title:hover { + color: var(--c-primary, #1890ff); +} + +.aksrt-user-home .uh-forum__item-meta { + display: flex; + gap: 12px; + font-size: 12px; + color: var(--c-text-3, #999); +} + +.aksrt-user-home .uh-forum__item-meta i { + margin-right: 3px; +} + +.aksrt-user-home .uh-forum__section-title { + font-size: 14px; + font-weight: 600; + color: var(--c-text-2, #666); + margin: 16px 0 10px; + padding-bottom: 6px; + border-bottom: 1px solid var(--c-border-light, #f5f5f5); +} + +.aksrt-user-home .uh-forum__section-title i { + margin-right: 4px; + font-size: 13px; +} + +.aksrt-user-home .uh-forum__plate-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); + gap: 10px; + margin-bottom: 16px; +} + +.aksrt-user-home .uh-forum__plate-card { + display: block; + padding: 12px; + border: 1px solid var(--c-border, #e8e8e8); + border-radius: var(--radius, 6px); + text-decoration: none; + transition: border-color .2s, box-shadow .2s; +} + +.aksrt-user-home .uh-forum__plate-card:hover { + border-color: var(--c-primary, #1890ff); + box-shadow: 0 2px 8px rgba(0, 0, 0, .06); +} + +.aksrt-user-home .uh-forum__plate-name { + font-size: 14px; + font-weight: 600; + color: var(--c-text-1, #333); + margin-bottom: 6px; +} + +.aksrt-user-home .uh-forum__plate-stats { + display: flex; + gap: 10px; + font-size: 12px; + color: var(--c-text-3, #999); +} + +.aksrt-user-home .uh-forum__pagination { + margin-top: 16px; + text-align: center; } diff --git a/assets/js/author.js b/assets/js/author.js index 4d131b9d..999a190b 100644 --- a/assets/js/author.js +++ b/assets/js/author.js @@ -1,7 +1,8 @@ /** - * AKSRT Author Page + * AKSRT Public User Home runtime * - * Handles public author dashboard tabs and profile cover uploads. + * Handles public user-home dashboard tabs and cover uploads. + * Loaded on /user/{nicename}/ (author archives 301-redirect here). * * @package AKSRT */ diff --git a/assets/js/routes/user-home.js b/assets/js/routes/user-home.js index abfdfc80..4183bb8b 100644 --- a/assets/js/routes/user-home.js +++ b/assets/js/routes/user-home.js @@ -1,70 +1,10 @@ /** - * AKSRT User Home — 公开用户主页专属脚本 + * Deprecated path. * - * 负责公开主页 Tab 切换和 URL 同步。 + * Public user-home tabs/cover are handled by assets/js/author.js + * (enqueued as aksrt-author on profile/user-home routes). + * This file intentionally does nothing to avoid double-binding. */ - -(function() { +(function () { 'use strict'; - - function initUserHomeTabs() { - var tabContainer = document.querySelector('.dashboard--public .dashboard-tabs'); - if (!tabContainer) return; - - var tabs = tabContainer.querySelectorAll('[data-tab]'); - var panels = {}; - var defaultTab = tabs.length ? tabs[0].getAttribute('data-tab') : 'posts'; - - tabs.forEach(function(tab) { - var name = tab.getAttribute('data-tab'); - var panel = document.getElementById('panel-' + name); - if (panel) { - panels[name] = { tab: tab, panel: panel }; - } - }); - - function switchTo(name) { - if (!panels[name]) name = defaultTab; - - Object.keys(panels).forEach(function(key) { - var active = key === name; - panels[key].tab.classList.toggle('is-active', active); - panels[key].tab.setAttribute('aria-selected', active ? 'true' : 'false'); - panels[key].panel.classList.toggle('is-active', active); - panels[key].panel.hidden = !active; - }); - } - - function tabFromUrl() { - var m = window.location.search.match(/[?&]tab=([^&]+)/); - return m ? decodeURIComponent(m[1]) : defaultTab; - } - - function updateUrl(name) { - if (!window.history.replaceState) return; - var u = new URL(window.location); - if (name === defaultTab) { - u.searchParams.delete('tab'); - } else { - u.searchParams.set('tab', name); - } - window.history.replaceState({}, '', u); - } - - tabs.forEach(function(tab) { - tab.addEventListener('click', function() { - var name = this.getAttribute('data-tab'); - switchTo(name); - updateUrl(name); - }); - }); - - switchTo(tabFromUrl()); - } - - if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', initUserHomeTabs); - } else { - initUserHomeTabs(); - } })(); diff --git a/author.php b/author.php index 31f76e9d..042eee76 100644 --- a/author.php +++ b/author.php @@ -1,136 +1,31 @@ ID; -$dashboard = function_exists('aksrt_get_user_dashboard_view') - ? aksrt_get_user_dashboard_view($user_id, ['viewer_id' => get_current_user_id()]) - : []; +if ($user instanceof WP_User) { + wp_safe_redirect(home_url('/user/' . trailingslashit($user->user_nicename)), 301); + exit; +} -$user_home_settings = class_exists('AKSRT_Settings') - ? AKSRT_Settings::get_user_home_settings() - : [ - 'tabs' => ['posts', 'comments', 'favorites'], - 'sidebar' => true, - 'cover' => true, - 'follow' => true, - 'posts_per_page' => 10, - ]; - -require_once AKSRT_DIR . '/templates/parts/user-shared-helpers.php'; -?> - -
-
-
-
- - $author, - 'dashboard' => $dashboard, - 'user_home_settings' => $user_home_settings, - 'is_author_page' => true, - ]); - ?> - - - -
-
-

- - -

-
- - -
- - [ - 'type' => 'view', - 'url' => get_permalink(), - 'label' => __('阅读', 'aksrt'), - ], - ]); ?> - -
- - max_num_pages; - $current_page = max(1, (int) get_query_var('paged')); - if ($total_pages > 1) : - ?> -
- $total_pages, - 'current' => $current_page, - 'mid_size' => 2, - 'prev_text' => '', - 'next_text' => '', - ]); - ?> -
- - - -
-
- -
-

-

display_name)); ?>

-
- -
- - -
- - - - -
-
-
- - +wp_safe_redirect(home_url('/'), 302); +exit; diff --git a/inc/classes/class-aksrt-user.php b/inc/classes/class-aksrt-user.php index 3b99c586..372be14f 100644 --- a/inc/classes/class-aksrt-user.php +++ b/inc/classes/class-aksrt-user.php @@ -712,7 +712,8 @@ if (!function_exists('aksrt_is_user_home_page')) : * 判断当前是否为公开用户主页 */ function aksrt_is_user_home_page(): bool { - return (bool) get_query_var('user_nicename'); + return (bool) get_query_var('user_nicename') + || is_page_template('templates/pages/page-user-home.php'); } endif; diff --git a/inc/classes/scripts-traits/trait-aksrt-scripts-part-1b.php b/inc/classes/scripts-traits/trait-aksrt-scripts-part-1b.php index 29279aa5..c6ecb50f 100644 --- a/inc/classes/scripts-traits/trait-aksrt-scripts-part-1b.php +++ b/inc/classes/scripts-traits/trait-aksrt-scripts-part-1b.php @@ -151,7 +151,6 @@ trait AKSRT_Scripts_Part_1b { $is_auth_page = $is_auth_route || (function_exists('aksrt_is_auth_page_request') && aksrt_is_auth_page_request()); $is_profile_page = $is_profile_route - || is_author() || (function_exists('aksrt_is_user_home_page') && aksrt_is_user_home_page()) || (function_exists('aksrt_is_user_center_page') && aksrt_is_user_center_page()) || is_page_template('templates/pages/page-profile.php') @@ -238,13 +237,12 @@ trait AKSRT_Scripts_Part_1b { file_exists($profile_css_path) ? (string) filemtime($profile_css_path) : $version ); - // 本人中心 vs 公开主页/作者页拆分加载 + // 本人中心 vs 公开主页拆分加载 $is_public_user_home = $is_profile_route - || is_author() || (function_exists('aksrt_is_user_home_page') && aksrt_is_user_home_page()) || is_page_template('templates/pages/page-user-home.php'); if ($is_public_user_home) { - // /user/{nicename}/ 与 /author/{nicename}/ 共用公开主页样式 + // /user/{nicename}/ 公开主页 $user_home_css_path = get_template_directory() . '/assets/css/routes/user-home.css'; wp_enqueue_style( 'aksrt-route-user-home', @@ -533,12 +531,6 @@ trait AKSRT_Scripts_Part_1b { } } - // 作者归档(虽然 author.php 在 Phase 3 会重定向,但保留兼容) - if (is_author()) { - $enqueue_module('pages'); - $enqueue_module('post-card'); - $enqueue_module('comments'); - } // 404 页面 if (is_404()) { diff --git a/inc/classes/scripts-traits/trait-aksrt-scripts-part-2.php b/inc/classes/scripts-traits/trait-aksrt-scripts-part-2.php index ba9fbd70..5d4233e7 100644 --- a/inc/classes/scripts-traits/trait-aksrt-scripts-part-2.php +++ b/inc/classes/scripts-traits/trait-aksrt-scripts-part-2.php @@ -112,12 +112,9 @@ trait AKSRT_Scripts_Part_2 { if (function_exists('aksrt_is_user_center_page') && aksrt_is_user_center_page()) { $classes[] = 'aksrt-user-center'; } - if ((function_exists('aksrt_is_user_home_page') && aksrt_is_user_home_page()) || is_author()) { + if (function_exists('aksrt_is_user_home_page') && aksrt_is_user_home_page()) { $classes[] = 'aksrt-user-home'; } - if (is_author()) { - $classes[] = 'aksrt-author-page'; - } if (function_exists('aksrt_is_auth_page_request') && aksrt_is_auth_page_request()) { $classes[] = 'auth-page'; } diff --git a/templates/parts/user-home/README.md b/templates/parts/user-home/README.md index 276fc118..2af84b0d 100644 --- a/templates/parts/user-home/README.md +++ b/templates/parts/user-home/README.md @@ -7,6 +7,12 @@ - 内容面板:panels-core.php / panel-forum.php / panel-follow.php - 侧栏:sidebar.php - 列表项:templates/parts/content-profile-*.php +- 样式:assets/css/routes/user-home.css(含 uh-forum)+ shared profile.css +- 脚本:assets/js/author.js(公开主页 tab / cover;author 归档 301 到 /user/) + +作者归档: +- author.php 仅作 301 回退到 /user/{nicename}/ +- 不再维护独立作者页 UI 旧 uh-* 草稿 partial 已删除,勿再引入。 -->