archive/search/page 不再用 aksrt_ph_* query-var 传参, page.php 同步对齐 content-shell 主结构。
111 lines
3.5 KiB
PHP
111 lines
3.5 KiB
PHP
<?php
|
||
/**
|
||
* Reusable Page Header Template Part.
|
||
*
|
||
* Contract: get_template_part(..., null, $args)
|
||
* Prefer explicit $args over ambient query vars.
|
||
*
|
||
* Args:
|
||
* style – '' | '1' | '2' | '3' | 'not'
|
||
* eyebrow – eyebrow label text
|
||
* title – title HTML (caller escapes)
|
||
* desc – description text
|
||
* cover – cover image URL override
|
||
* extra – extra HTML (caller escapes)
|
||
*
|
||
* @package AKSRT
|
||
*/
|
||
|
||
defined('ABSPATH') || exit;
|
||
|
||
$args = is_array($args ?? null) ? $args : [];
|
||
|
||
// Resolve style: explicit args > residual query var > global setting.
|
||
$ph_style = array_key_exists('style', $args) ? $args['style'] : null;
|
||
if ($ph_style === null) {
|
||
$ph_style = get_query_var('aksrt_ph_style', null);
|
||
}
|
||
if ($ph_style === null) {
|
||
$ph_style = class_exists('AKSRT_Settings')
|
||
? (AKSRT_Settings::get_other_page_settings()['header_style'] ?? '1')
|
||
: '1';
|
||
}
|
||
if ($ph_style === 'not') {
|
||
$ph_style = '';
|
||
}
|
||
|
||
// '' means "don't show header"
|
||
if ($ph_style === '') {
|
||
return;
|
||
}
|
||
|
||
$ph_eyebrow = array_key_exists('eyebrow', $args)
|
||
? (string) $args['eyebrow']
|
||
: (string) get_query_var('aksrt_ph_eyebrow', '');
|
||
$ph_title = array_key_exists('title', $args)
|
||
? (string) $args['title']
|
||
: (string) get_query_var('aksrt_ph_title', '');
|
||
$ph_desc = array_key_exists('desc', $args)
|
||
? (string) $args['desc']
|
||
: (string) get_query_var('aksrt_ph_desc', '');
|
||
$ph_extra = array_key_exists('extra', $args)
|
||
? (string) $args['extra']
|
||
: (string) get_query_var('aksrt_ph_extra', '');
|
||
|
||
// Cover image: explicit args > residual query var > global setting > post thumbnail.
|
||
$ph_cover = array_key_exists('cover', $args)
|
||
? (string) $args['cover']
|
||
: (string) get_query_var('aksrt_ph_cover', '');
|
||
if ($ph_cover === '' && class_exists('AKSRT_Settings')) {
|
||
$other = AKSRT_Settings::get_other_page_settings();
|
||
$ph_cover = (string) ($other['header_cover_img'] ?? '');
|
||
}
|
||
if ($ph_cover === '' && has_post_thumbnail()) {
|
||
$ph_cover = (string) get_the_post_thumbnail_url(get_the_ID(), 'full');
|
||
}
|
||
|
||
// Map style value to CSS modifier class.
|
||
$style_class = 'term-page-header--simple';
|
||
if ($ph_style === '2') {
|
||
$style_class = 'term-page-header--card';
|
||
} elseif ($ph_style === '3') {
|
||
$style_class = 'term-page-header--cover';
|
||
}
|
||
|
||
// Cover inline style (for cover style).
|
||
$cover_style = '';
|
||
if ($ph_style === '3' && $ph_cover !== '') {
|
||
$cover_style = ' style="background-image:url(\'' . esc_url($ph_cover) . '\')"';
|
||
}
|
||
?>
|
||
|
||
<header class="page-header term-page-header <?php echo esc_attr($style_class); ?>">
|
||
<?php if ($ph_style === '3' && $ph_cover !== '') : ?>
|
||
<div class="term-page-header__cover-bg"<?php echo $cover_style; /* phpcs:ignore -- escaped above */ ?>>
|
||
<div class="term-page-header__cover-overlay"></div>
|
||
</div>
|
||
<?php endif; ?>
|
||
|
||
<div class="term-page-header__body<?php echo $ph_style === '3' ? ' term-page-header__body--overlay' : ''; ?>">
|
||
<div>
|
||
<?php if ($ph_eyebrow !== '') : ?>
|
||
<p class="term-page-header__eyebrow"><?php echo esc_html($ph_eyebrow); ?></p>
|
||
<?php endif; ?>
|
||
|
||
<h1 class="entry-title"><?php echo $ph_title; /* phpcs:ignore -- caller must escape */ ?></h1>
|
||
|
||
<?php if ($ph_desc !== '') : ?>
|
||
<p class="term-page-header__desc"><?php echo esc_html($ph_desc); ?></p>
|
||
<?php endif; ?>
|
||
</div>
|
||
|
||
<?php if ($ph_extra !== '') : ?>
|
||
<?php echo $ph_extra; /* phpcs:ignore -- caller must escape */ ?>
|
||
<?php endif; ?>
|
||
</div>
|
||
|
||
<?php if ($ph_style === '2' && $ph_cover !== '') : ?>
|
||
<div class="term-page-header__cover"<?php echo $cover_style; /* phpcs:ignore -- escaped above */ ?>></div>
|
||
<?php endif; ?>
|
||
</header>
|