archives/friends/newposts/posts-navs/categories 统一壳层与 page-header 契约, 主路径不再保留 aksrt_ph_* ambient 传参。
97 lines
2.9 KiB
PHP
97 lines
2.9 KiB
PHP
<?php
|
||
/**
|
||
* Reusable Page Header Template Part.
|
||
*
|
||
* Contract: get_template_part(..., null, $args)
|
||
*
|
||
* 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 > global setting.
|
||
$ph_style = array_key_exists('style', $args) ? $args['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 = (string) ($args['eyebrow'] ?? '');
|
||
$ph_title = (string) ($args['title'] ?? '');
|
||
$ph_desc = (string) ($args['desc'] ?? '');
|
||
$ph_extra = (string) ($args['extra'] ?? '');
|
||
|
||
// Cover image: explicit args > global setting > post thumbnail.
|
||
$ph_cover = (string) ($args['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>
|