fix(page-display): isolate header component page scopes
This commit is contained in:
@@ -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')) {
|
||||
function aksrt_header_slide_matches_query(string $type): bool {
|
||||
$type = sanitize_key($type);
|
||||
switch ($type) {
|
||||
case 'home':
|
||||
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 ($type === 'user_home') {
|
||||
$type = 'author';
|
||||
}
|
||||
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 false;
|
||||
return $type !== '' && $type === aksrt_header_slide_current_page_type();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -225,5 +225,8 @@ test('save contract rejects invalid input and round-trips canonical nested value
|
||||
generic_page_excludes_center: false,
|
||||
templated_public_user_home: 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 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_category(): bool { return $GLOBALS['aksrt_visibility_query'] === 'category'; }
|
||||
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']),
|
||||
'templated_public_user_home' => aksrt_visibility_case('user_home_page', ['user_home']),
|
||||
'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([
|
||||
|
||||
Reference in New Issue
Block a user