feat(wpmc S3): Helpers::current_town URI-match path

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Vladimir Bryzgalov
2026-05-12 19:58:19 +05:00
parent 58838b0c19
commit f81cefefbe
2 changed files with 62 additions and 0 deletions
+47
View File
@@ -25,4 +25,51 @@ final class Helpers
$term = \get_term_by('slug', $slug, $taxonomy);
return self::$term_cache[$key] = ($term instanceof \WP_Term) ? $term : null;
}
public static function current_town(): ?string
{
if (self::$current_town_resolved) {
return self::$current_town_memo;
}
$uri = $_SERVER['REQUEST_URI'] ?? '/';
$first_segment = self::first_path_segment($uri);
$resolved = null;
if ($first_segment !== null) {
$terms = \get_terms('town', [
'hide_empty' => false,
'fields' => 'id=>slug',
]);
if (is_array($terms) && in_array($first_segment, $terms, true)) {
$resolved = $first_segment;
}
}
if ($resolved === null) {
$resolved = \apply_filters('wpmc_main_town_slug', null);
if (!is_string($resolved) || $resolved === '') {
$resolved = null;
}
}
$resolved = \apply_filters('wpmc_current_town_slug', $resolved);
if (!is_string($resolved) || $resolved === '') {
$resolved = null;
}
self::$current_town_memo = $resolved;
self::$current_town_resolved = true;
return $resolved;
}
private static function first_path_segment(string $uri): ?string
{
$path = strtok($uri, '?');
if ($path === false) {
return null;
}
$parts = array_values(array_filter(explode('/', $path), static fn(string $p) => $p !== ''));
return $parts[0] ?? null;
}
}