Merge pull request 'fix(admin): close hero/banner config chain in page-display IA' (#111) from worktree-hero-banner-chain into main

Reviewed-on: CYL/wordpress-theme-aksrt#111
This commit is contained in:
2026-07-13 22:11:48 +08:00
8 changed files with 52 additions and 17 deletions
@@ -42,10 +42,32 @@ export const pageDisplaySection = {
label: '顶部多功能组件',
route: '/page-display/header-components',
title: '顶部多功能组件',
desc: '顶部轮播、图标卡片、搜索条、公告条等组件配置。',
desc: '配置顶部组件显示范围、轮播参数、搜索覆盖层与图标卡片。幻灯片内容见「Hero 轮播」「Banner 轮播」。',
canonicalDomain: 'page_display',
section: 'header-components',
}),
customPage({
key: 'page-display-hero',
name: 'PageDisplayHero',
label: 'Hero 轮播',
route: '/page-display/hero',
title: 'Hero 轮播管理',
desc: '管理首页顶部 Hero 幻灯片内容(图片/视频、文案、图层、跳转)。显示开关与搜索/卡片配置见「顶部多功能组件」。',
component: 'HeroManager',
canonicalDomain: 'page_display',
section: 'hero',
}),
customPage({
key: 'page-display-banner',
name: 'PageDisplayBanner',
label: 'Banner 轮播',
route: '/page-display/banner',
title: 'Banner 管理',
desc: '管理首页内容流 Banner 幻灯片(图片、文案、跳转、启用状态)。',
component: 'BannerManager',
canonicalDomain: 'page_display',
section: 'banner',
}),
customPage({
key: 'page-display-footer',
name: 'PageDisplayFooter',
@@ -181,8 +181,15 @@
Hero 与 Banner 已作为固定首页骨架的一部分维护,不再由旧版首页模块编排驱动。
</n-alert>
<n-alert type="info" :show-icon="false">
如需调整首页首屏运营区,请前往对应 Hero / Banner 管理页,而不是返回旧模块工作台。
如需调整首页首屏运营区,请前往对应管理页配置幻灯片内容或顶部组件参数。
</n-alert>
<n-space>
<n-button tag="a" href="#/page-display/hero" secondary type="primary">管理 Hero 轮播</n-button>
<n-button tag="a" href="#/page-display/banner" secondary type="primary">管理 Banner 轮播</n-button>
<n-button tag="a" href="#/page-display/header-components" secondary>
顶部多功能组件
</n-button>
</n-space>
</n-space>
</n-card>
</n-spin>
@@ -5,6 +5,8 @@ export const corePageLoaders = {
FooterTabbarSettings: () => import('@/pages/content/FooterTabbarSettings.vue'),
FooterSettings: () => import('@/pages/content/FooterSettings.vue'),
HomepageSettings: () => import('@/pages/content/HomepageSettings.vue'),
HeroManager: () => import('@/pages/content/HeroManager.vue'),
BannerManager: () => import('@/pages/content/BannerManager.vue'),
PostPageSettings: () => import('@/pages/post-list/PostPageSettings.vue'),
CommentSettings: () => import('@/pages/post-list/CommentSettings.vue'),
CommentPermissions: () => import('@/pages/permissions/CommentPermissions.vue'),
@@ -589,7 +589,7 @@ export const pageDisplaySchemas = {
key: 'page_display.header-components',
title: '顶部多功能组件',
icon: 'fas fa-th',
description: '顶部轮播、图标卡片、搜索条、公告条等组件配置。',
description: '配置顶部组件的显示范围、设备规则、轮播参数、搜索覆盖层与图标卡片。幻灯片图片/文案内容请到「Hero 轮播」「Banner 轮播」管理。',
defaults: {
header_components_search_enabled: true,
header_components_cards_enabled: false,
@@ -96,6 +96,7 @@ class AKSRT_Admin_Page_Display_Controller extends AKSRT_Admin_Controller_Base {
'device_visibility' => get_post_meta($post->ID, '_device_visibility', true) ?: 'all',
'enabled' => get_post_meta($post->ID, '_enabled', true) === '1',
'show_text' => get_post_meta($post->ID, '_show_text', true) !== '0',
'show_meta' => get_post_meta($post->ID, '_show_meta', true) === '1',
'kind' => get_post_meta($post->ID, '_aksrt_kind', true) ?: 'hero',
'sort_order' => $post->menu_order,
'text_size_pc' => get_post_meta($post->ID, '_text_size_pc', true) ?: '',
@@ -132,6 +133,7 @@ class AKSRT_Admin_Page_Display_Controller extends AKSRT_Admin_Controller_Base {
update_post_meta($post_id, '_device_visibility', in_array($params['device_visibility'] ?? '', ['all', 'pc', 'mobile'], true) ? $params['device_visibility'] : 'all');
update_post_meta($post_id, '_enabled', !array_key_exists('enabled', $params) || !empty($params['enabled']) ? '1' : '0');
update_post_meta($post_id, '_show_text', !array_key_exists('show_text', $params) || !empty($params['show_text']) ? '1' : '0');
update_post_meta($post_id, '_show_meta', !empty($params['show_meta']) ? '1' : '0');
update_post_meta($post_id, '_aksrt_kind', $kind);
update_post_meta($post_id, '_text_size_pc', sanitize_text_field($params['text_size_pc'] ?? ''));
update_post_meta($post_id, '_text_size_m', sanitize_text_field($params['text_size_m'] ?? ''));
@@ -158,7 +160,10 @@ class AKSRT_Admin_Page_Display_Controller extends AKSRT_Admin_Controller_Base {
$kind = $this->normalize_banner_kind($params['kind'] ?? get_post_meta($id, '_aksrt_kind', true) ?: 'hero');
$title = sanitize_text_field($params['title'] ?? '');
if ($title === '') {
return new WP_REST_Response(['code' => 'validation_error', 'message' => __('标题不能为空', 'aksrt')], 422);
$existing = get_the_title($id);
$title = is_string($existing) && $existing !== ''
? $existing
: ('banner' === $kind ? 'Banner Slide' : 'Hero Slide');
}
wp_update_post([
@@ -67,11 +67,12 @@ class AKSRT_Admin_Schema_Page_Display {
],
],
'header-components' => [
'key' => 'header-components',
'title' => '顶部多功能组件',
'version' => '1.1.0',
'option_key' => 'aksrt_settings',
'groups' => [
'key' => 'header-components',
'title' => '顶部多功能组件',
'description' => '配置顶部组件的显示范围、设备规则、轮播参数、搜索覆盖层与图标卡片。幻灯片图片/文案内容请到「Hero 轮播」「Banner 轮播」管理。',
'version' => '1.1.0',
'option_key' => 'aksrt_settings',
'groups' => [
['key' => 'visibility', 'title' => '显示规则', 'fields' => [
['key' => 'header_components_search_enabled', 'label' => '启用搜索覆盖层', 'type' => 'switch', 'default' => true],
['key' => 'header_components_cards_enabled', 'label' => '启用图标卡片', 'type' => 'switch', 'default' => false],
@@ -27,7 +27,7 @@ if (empty($banners)) {
echo '<p class="muted-2-color">' . esc_html__('No Banner slides found. Add banner slides in admin.', 'aksrt') . '</p>';
if (function_exists('aksrt_render_admin_quick_link')) {
echo '<div class="home-module__admin-tools">';
aksrt_render_admin_quick_link('page-display/header-components', __('Header / Banner settings', 'aksrt'));
aksrt_render_admin_quick_link('page-display/banner', __('Banner 轮播管理', 'aksrt'));
echo '</div>';
}
echo '</div>';
@@ -110,7 +110,7 @@ $swiper_config = [
</div>
<?php if (function_exists('aksrt_render_admin_quick_link')) : ?>
<div class="home-module__admin-tools">
<?php aksrt_render_admin_quick_link('page-display/header-components', __('顶部组件设置', 'aksrt')); ?>
<?php aksrt_render_admin_quick_link('page-display/banner', __('Banner 轮播管理', 'aksrt')); ?>
</div>
<?php endif; ?>
</div>
+4 -6
View File
@@ -296,7 +296,8 @@ if (!empty($hero_banners)) :
<?php $render_icon_cards(); ?>
<?php if (function_exists('aksrt_render_admin_quick_link')) : ?>
<div class="home-module__admin-tools">
<?php aksrt_render_admin_quick_link('page-display/header-components', __('顶部组件设置', 'aksrt')); ?>
<?php aksrt_render_admin_quick_link('page-display/hero', __('Hero 轮播管理', 'aksrt')); ?>
<?php aksrt_render_admin_quick_link('page-display/header-components', __('顶部多功能组件', 'aksrt')); ?>
</div>
<?php endif; ?>
</div>
@@ -304,7 +305,6 @@ if (!empty($hero_banners)) :
<?php else : ?>
<?php
$is_admin_user = current_user_can('manage_options');
$hero_admin_url = admin_url('admin.php?page=aksrt-settings#/content/hero');
?>
<div class="<?php echo esc_attr(implode(' ', $container_classes)); ?>" id="aksrt-header-components">
<div class="header-components slide-header header-components--gradient">
@@ -314,9 +314,6 @@ if (!empty($hero_banners)) :
<?php if ($is_admin_user) : ?>
<p class="header-components__admin-hint" role="note">
<?php esc_html_e('No Hero slides found. Showing fallback site info.', 'aksrt'); ?>
<a class="header-components__admin-link" href="<?php echo esc_url($hero_admin_url); ?>">
<?php esc_html_e('Go to Content -> Hero Components', 'aksrt'); ?>
</a>
</p>
<?php endif; ?>
</div>
@@ -329,7 +326,8 @@ if (!empty($hero_banners)) :
<?php $render_icon_cards(); ?>
<?php if (function_exists('aksrt_render_admin_quick_link')) : ?>
<div class="home-module__admin-tools">
<?php aksrt_render_admin_quick_link('page-display/header-components', __('顶部组件设置', 'aksrt')); ?>
<?php aksrt_render_admin_quick_link('page-display/hero', __('Hero 轮播管理', 'aksrt')); ?>
<?php aksrt_render_admin_quick_link('page-display/header-components', __('顶部多功能组件', 'aksrt')); ?>
</div>
<?php endif; ?>
</div>