Files
wordpress-theme-aksrt/templates/parts/home-modules/module-banner.php
T

105 lines
4.8 KiB
PHP

<?php
/**
* Home Module · Banner — v4.0 Zibll-Inspired
*
* 内联轮播条,使用与 header-slider 相同的 Swiper 架构,
* 但以圆角卡片形式嵌入内容流中(非全宽)。
*
* 支持配置:
* - 自动播放
* - 圆角卡片样式
* - 标题/副标题叠加
* - 点击跳转
*
* @package AKSRT
* @version 4.0.0
*/
defined('ABSPATH') || exit;
if (class_exists('AKSRT_Settings') && !AKSRT_Settings::homepage_module_banner_enabled()) {
return;
}
$banners = function_exists('aksrt_get_banners') ? aksrt_get_banners(8, 'banner') : [];
if (empty($banners)) return;
$cfg = get_query_var('aksrt_module_config', []);
if (!is_array($cfg)) $cfg = [];
$slide_count = count($banners);
// Swiper config — Banner uses a subset of the global slider config
$slider_cfg = function_exists('aksrt_get_slider_config') ? aksrt_get_slider_config() : [];
$swiper_config = [
'effect' => 'slide', // Banner always uses slide effect
'loop' => $slide_count > 1 && ($slider_cfg['loop'] ?? true),
'speed' => 500,
'autoplay' => $slide_count > 1 ? ['delay' => ($slider_cfg['autoplay_interval'] ?? 5000), 'disableOnInteraction' => false] : false,
'pagination' => false,
'navigation' => !empty($slider_cfg['navigation']),
'keyboard' => ['enabled' => true],
'spaceBetween' => ($slider_cfg['space_between'] ?? 0),
];
?>
<div class="home-module home-module--banner">
<div class="banner-module">
<div class="swiper banner-module__swiper" data-swiper-config="<?php echo esc_attr(wp_json_encode($swiper_config)); ?>">
<div class="swiper-wrapper">
<?php foreach ($banners as $index => $slide) :
$device_vis = $slide['device_visibility'] ?? 'all';
$slide_classes = 'swiper-slide';
if ($device_vis === 'pc') {
$slide_classes .= ' banner-slide--pc-only';
} elseif ($device_vis === 'mobile') {
$slide_classes .= ' banner-slide--mobile-only';
}
$link_target = !empty($slide['link_target']) ? $slide['link_target'] : '_self';
?>
<div class="<?php echo esc_attr($slide_classes); ?>"<?php if (!empty($slide['link'])) : ?> data-link="<?php echo esc_url($slide['link']); ?>" data-target="<?php echo esc_attr($link_target); ?>"<?php endif; ?>>
<div class="banner-module__slide-bg">
<?php if (!empty($slide['image'])) : ?>
<img
src="<?php echo esc_url($slide['image']); ?>"
alt="<?php echo esc_attr($slide['title'] ?: get_bloginfo('name')); ?>"
loading="<?php echo 0 === $index ? 'eager' : 'lazy'; ?>"
decoding="async"
class="fit-cover"
>
<?php else : ?>
<div class="banner-module__slide-fallback"></div>
<?php endif; ?>
</div>
<div class="banner-module__slide-overlay"></div>
<?php
$show_text = !isset($slide['show_text']) || $slide['show_text'];
$has_title = !empty($slide['title']);
$has_subtitle = !empty($slide['subtitle']);
?>
<?php if ($show_text && ($has_title || $has_subtitle)) : ?>
<div class="banner-module__content">
<?php if ($has_title) : ?>
<h3 class="banner-module__title"><?php echo esc_html($slide['title']); ?></h3>
<?php endif; ?>
<?php if ($has_subtitle) : ?>
<p class="banner-module__subtitle"><?php echo esc_html($slide['subtitle']); ?></p>
<?php endif; ?>
</div>
<?php endif; ?>
</div>
<?php endforeach; ?>
</div>
<?php if ($slide_count > 1) : ?>
<!-- 前后箭头 -->
<div class="banner-module__prev swiper-button-prev"></div>
<div class="banner-module__next swiper-button-next"></div>
<?php endif; ?>
</div>
</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')); ?>
</div>
<?php endif; ?>
</div>