fix(page-display): isolate header component page scopes

This commit is contained in:
2026-08-19 13:45:54 +08:00
parent d4a9b7fd98
commit a5ed4bbb6f
3 changed files with 61 additions and 33 deletions
+48 -32
View File
@@ -48,42 +48,58 @@ if (!function_exists('aksrt_get_page_header_slider_config')) {
} }
} }
if (!function_exists('aksrt_header_slide_current_page_type')) {
/**
* Resolve one mutually exclusive page type for the header component.
*
* Custom rewrite requests can retain WordPress's is_home flag, so the
* explicit theme surfaces must win before the home fallback is evaluated.
*/
function aksrt_header_slide_current_page_type(): string {
if (is_author() || (function_exists('aksrt_is_user_home_page') && aksrt_is_user_home_page())) {
return 'author';
}
if (function_exists('aksrt_is_user_center_page') && aksrt_is_user_center_page()) {
return 'user_center';
}
if (is_front_page()) {
return 'home';
}
if (is_category()) {
return 'category';
}
if (is_tag()) {
return 'tag';
}
if (is_singular('post')) {
return 'single';
}
if (is_search()) {
return 'search';
}
if (is_page()) {
foreach (aksrt_header_slide_excluded_page_templates() as $template) {
if (is_page_template($template)) {
return '';
}
}
return 'page';
}
if (is_home()) {
return 'home';
}
return '';
}
}
if (!function_exists('aksrt_header_slide_matches_query')) { if (!function_exists('aksrt_header_slide_matches_query')) {
function aksrt_header_slide_matches_query(string $type): bool { function aksrt_header_slide_matches_query(string $type): bool {
$type = sanitize_key($type); $type = sanitize_key($type);
switch ($type) { if ($type === 'user_home') {
case 'home': $type = 'author';
return is_home() || is_front_page();
case 'category':
return is_category();
case 'tag':
return is_tag();
case 'user_home':
case 'author':
return is_author() || (function_exists('aksrt_is_user_home_page') && aksrt_is_user_home_page());
case 'user_center':
return function_exists('aksrt_is_user_center_page') && aksrt_is_user_center_page();
case 'single':
return is_singular('post');
case 'search':
return is_search();
case 'page':
if (!is_page()) {
return false;
}
if ((function_exists('aksrt_is_user_home_page') && aksrt_is_user_home_page())
|| (function_exists('aksrt_is_user_center_page') && aksrt_is_user_center_page())) {
return false;
}
foreach (aksrt_header_slide_excluded_page_templates() as $template) {
if (is_page_template($template)) {
return false;
}
}
return true;
} }
return $type !== '' && $type === aksrt_header_slide_current_page_type();
return false;
} }
} }
@@ -225,5 +225,8 @@ test('save contract rejects invalid input and round-trips canonical nested value
generic_page_excludes_center: false, generic_page_excludes_center: false,
templated_public_user_home: true, templated_public_user_home: true,
templated_user_center: true, templated_user_center: true,
home_excludes_page: false,
home_excludes_public_home: false,
home_excludes_user_center: false,
}) })
}) })
@@ -88,7 +88,13 @@ namespace {
function is_admin(): bool { return false; } function is_admin(): bool { return false; }
function wp_is_mobile(): bool { return false; } function wp_is_mobile(): bool { return false; }
function is_home(): bool { return $GLOBALS['aksrt_visibility_query'] === 'home'; } function is_home(): bool {
// Custom rewrites can leave WordPress's posts-page flag set even though
// the theme resolves the request to another front-end surface.
return in_array($GLOBALS['aksrt_visibility_query'], [
'home', 'page', 'user_home', 'user_center', 'user_home_page', 'user_center_page',
], true);
}
function is_front_page(): bool { return $GLOBALS['aksrt_visibility_query'] === 'home'; } function is_front_page(): bool { return $GLOBALS['aksrt_visibility_query'] === 'home'; }
function is_category(): bool { return $GLOBALS['aksrt_visibility_query'] === 'category'; } function is_category(): bool { return $GLOBALS['aksrt_visibility_query'] === 'category'; }
function is_tag(): bool { return $GLOBALS['aksrt_visibility_query'] === 'tag'; } function is_tag(): bool { return $GLOBALS['aksrt_visibility_query'] === 'tag'; }
@@ -214,6 +220,9 @@ namespace {
'generic_page_excludes_center' => aksrt_visibility_case('user_center_page', ['page']), 'generic_page_excludes_center' => aksrt_visibility_case('user_center_page', ['page']),
'templated_public_user_home' => aksrt_visibility_case('user_home_page', ['user_home']), 'templated_public_user_home' => aksrt_visibility_case('user_home_page', ['user_home']),
'templated_user_center' => aksrt_visibility_case('user_center_page', ['user_center']), 'templated_user_center' => aksrt_visibility_case('user_center_page', ['user_center']),
'home_excludes_page' => aksrt_visibility_case('page', ['home']),
'home_excludes_public_home' => aksrt_visibility_case('user_home', ['home']),
'home_excludes_user_center' => aksrt_visibility_case('user_center', ['home']),
]; ];
echo json_encode([ echo json_encode([