function tt_page_banner($args = null) {
// 1. Ensure $args is an array so we can safely check/assign keys
if ( ! is_array($args) ) {
$args = array();
}
// 2. Fetch global fallbacks early to avoid repeated database calls
$default_banner = get_option('page_banner') ? get_option('page_banner') : get_theme_file_uri('/image/page_banner.jpg');
$default_title = get_option('page_banner_title', '');
$default_subtitle = get_option('page_banner_subtitle', '');
// ==========================================
// BANNER URL LOGIC
// ==========================================
if ( ! isset($args['banner_url']) ) {
if ( is_singular() ) {
$meta_url = get_post_meta(get_the_ID(), 'page_banner', true);
$args['banner_url'] = ! empty($meta_url) ? $meta_url : $default_banner;
} elseif ( is_archive() ) {
$term_meta_url = get_term_meta(get_queried_object_id(), 'page_banner', true);
$args['banner_url'] = ! empty($term_meta_url) ? $term_meta_url : $default_banner;
} else {
$args['banner_url'] = $default_banner;
}
}
// ==========================================
// BANNER TITLE LOGIC
// ==========================================
if ( ! isset($args['banner_title']) ) {
if ( is_singular() ) {
$meta_title = get_post_meta(get_the_ID(), 'page_banner_title', true);
$args['banner_title'] = ! empty($meta_title) ? $meta_title : ( ! empty($default_title) ? $default_title : get_the_title() );
} elseif ( is_post_type_archive() ) {
// Checked BEFORE general is_archive() so it catches CPT archives correctly
$args['banner_title'] = post_type_archive_title('', false);
} elseif ( is_archive() ) {
$term_meta_title = get_term_meta(get_queried_object_id(), 'page_banner_title', true);
$args['banner_title'] = ! empty($term_meta_title) ? $term_meta_title : ( ! empty($default_title) ? $default_title : single_term_title('', false) );
} elseif ( is_search() ) {
$args['banner_title'] = sprintf(__('Search Results for: %s', 'textdomain'), get_search_query());
} elseif ( is_404() ) {
$args['banner_title'] = __('Page Not Found', 'textdomain');
} else {
$args['banner_title'] = ! empty($default_title) ? $default_title : get_bloginfo('name');
}
}
// ==========================================
// BANNER SUBTITLE LOGIC
// ==========================================
if ( ! isset($args['banner_subtitle']) ) {
if ( is_singular() ) {
$meta_sub = get_post_meta(get_the_ID(), 'page_banner_subtitle', true);
$args['banner_subtitle'] = ! empty($meta_sub) ? $meta_sub : $default_subtitle;
} elseif ( is_archive() ) {
$term_meta_sub = get_term_meta(get_queried_object_id(), 'page_banner_subtitle', true);
$args['banner_subtitle'] = ! empty($term_meta_sub) ? $term_meta_sub : $default_subtitle;
} else {
$args['banner_subtitle'] = $default_subtitle;
}
}
// ==========================================
// HTML OUTPUT (With proper escaping)
// ==========================================
?>
<section class="page-banner" id="pageBanner">
<div class="page-banner__bg">
<div class="page-banner__img-placeholder">
<div class="page-banner__img-inner">
<img src="<?php echo esc_url($args['banner_url']); ?>" alt="<?php echo esc_attr($args['banner_title']); ?>">
</div>
</div>
<div class="page-banner__overlay"></div>
</div>
<div class="page-banner__content">
<h1 class="page-banner__title reveal-up">
<?php echo esc_html($args['banner_title']); ?>
</h1>
<?php if ( ! empty($args['banner_subtitle']) ) : ?>
<p class="page-banner__sub reveal-fade delay-1">
<?php echo esc_html($args['banner_subtitle']); ?>
</p>
<?php endif; ?>
</div>
</section>
<?php
}