fix(homepage): align shell with zibll and restore post stream

Move header-slider outside main, render fluid zones once, default the
latest stream to plain posts by date, and cut dual-render/perf waste so
published posts and hero/banner structure match the zibll contract.
This commit is contained in:
2026-07-12 17:49:58 +08:00
parent 8be4c5c123
commit 8f19384582
11 changed files with 223 additions and 103 deletions
+23 -24
View File
@@ -92,25 +92,9 @@ if (!empty($aksrt_bg_styles)) {
<div id="aksrt-bg-vars" hidden <?php echo !empty($aksrt_bg_styles) ? "style=\"" . esc_attr(implode(';', $aksrt_bg_styles)) . "\"" : ""; ?>></div>
<?php if (is_active_sidebar('all_top_fluid')) : ?>
<div class="fluid-widget-wrap">
<?php dynamic_sidebar('all_top_fluid'); ?>
</div>
<?php endif; ?>
<?php if (is_active_sidebar('home_top_fluid') && (is_front_page() || is_home())) : ?>
<div class="fluid-widget-wrap">
<?php dynamic_sidebar('home_top_fluid'); ?>
</div>
<?php endif; ?>
<?php if (is_active_sidebar('single_top_fluid') && is_singular()) : ?>
<div class="fluid-widget-wrap">
<?php dynamic_sidebar('single_top_fluid'); ?>
</div>
<?php endif; ?>
<?php
// Fluid widget zones are rendered by page templates (homepage/single/archive)
// so they only appear once and stay in zibll order (after header-slider).
$aksrt_site_name = get_bloginfo('name');
$aksrt_brand_name = function_exists('aksrt_get_site_logo_text') ? aksrt_get_site_logo_text() : $aksrt_site_name;
$aksrt_brand_name = $aksrt_brand_name !== '' ? $aksrt_brand_name : $aksrt_site_name;
@@ -165,8 +149,14 @@ if (!empty($aksrt_bg_styles)) {
current_user_can('manage_options')
|| (class_exists('AKSRT_Front_Submit') && AKSRT_Front_Submit::get_instance()->can_submit())
);
$aksrt_show_header_slide = function_exists('aksrt_header_slide_is_show')
? aksrt_header_slide_is_show()
: false;
// Dual class contract: keep site-nav/* while aligning navbar/navbar-top with zibll.
$aksrt_nav_classes = [
'site-nav',
'navbar',
'navbar-top',
'site-nav--' . $aksrt_header_settings['nav_style'],
$aksrt_header_settings['fixed'] ? 'site-nav--fixed' : 'site-nav--static',
];
@@ -203,14 +193,17 @@ if (!empty($aksrt_bg_styles)) {
'header-layout-' . $aksrt_header_settings['layout'],
$aksrt_header_settings['fixed'] ? 'nav-fixed' : 'nav-static',
];
if (!empty($aksrt_header_settings['scroll_down_hide'])) {
if ($aksrt_show_header_slide) {
$aksrt_header_classes[] = 'show-slide';
}
if (!empty($aksrt_header_settings['scroll_down_hide']) && !empty($aksrt_header_settings['fixed'])) {
$aksrt_header_classes[] = 'scroll-down-hide';
}
?>
<header class="<?php echo esc_attr(implode(' ', array_map('sanitize_html_class', $aksrt_header_classes))); ?>">
<nav class="<?php echo esc_attr(implode(' ', $aksrt_nav_classes)); ?> <?php echo esc_attr($aksrt_header_settings['mobile_layout']); ?>"<?php echo !empty($aksrt_nav_styles) ? ' style="' . esc_attr(implode(';', $aksrt_nav_styles)) . '"' : ''; ?> data-aksrt-shell="site-nav">
<div class="container-fluid container-header">
<div class="site-nav__row">
<div class="site-nav__row navbar-collapse">
<a href="<?php echo esc_url(home_url('/')); ?>" class="<?php echo esc_attr($aksrt_brand_class); ?> navbar-brand" aria-label="<?php echo esc_attr($aksrt_brand_name); ?>">
<?php if ($aksrt_has_brand_logo) : ?>
<span class="site-brand__media navbar-logo"><?php echo $aksrt_brand_logo_html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></span>
@@ -383,10 +376,7 @@ if (!empty($aksrt_bg_styles)) {
</nav>
</header>
<?php if (empty($aksrt_header_settings['mobile_drawer'])) : ?>
<?php return; ?>
<?php endif; ?>
<?php if (!empty($aksrt_header_settings['mobile_drawer'])) : ?>
<div class="mobile-header nav-drawer-backdrop" id="nav-drawer-backdrop" aria-hidden="true"></div>
<div class="mobile-header nav-drawer" id="nav-drawer" data-aksrt-shell="nav-drawer" role="dialog" aria-modal="true" aria-labelledby="nav-drawer-title" aria-hidden="true">
<nav class="mobile-navbar">
@@ -499,3 +489,12 @@ if (!empty($aksrt_bg_styles)) {
<div class="fixed-body"></div>
</nav>
</div>
<?php endif; ?>
<?php
// Zibll contract: header slider sits after </header> (+ mobile drawer), before page fluid/main.
if (function_exists('aksrt_header_slide')) {
aksrt_header_slide();
}
?>