105 lines
4.8 KiB
PHP
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>
|