return (int) $page->ID; } return 0; } } add_filter('query_vars', function ($vars) { if (!in_array('tw_country_iso', $vars, true)) { $vars[] = 'tw_country_iso'; } return $vars; }); /* * Normale WordPress-Rewrite-Regel. */ add_action('init', function () { add_rewrite_rule( '^([a-z]{2})/?$', 'index.php?tw_country_iso=$matches[1]', 'top' ); }); /* * WICHTIGER FALLBACK: * Funktioniert auch dann, wenn die Rewrite-Regeln noch nicht * neu gespeichert wurden. */ add_action('parse_request', function ($wp) { $path = trim((string) parse_url($_SERVER['REQUEST_URI'] ?? '', PHP_URL_PATH), '/'); if ($path === '' || !preg_match('/^([a-z]{2})$/i', $path, $m)) { return; } $iso = strtoupper($m[1]); $page_id = tw_country_page_for_iso($iso); if (!$page_id) { return; } $wp->query_vars['page_id'] = $page_id; $wp->query_vars['tw_country_iso'] = $iso; unset( $wp->query_vars['name'], $wp->query_vars['pagename'], $wp->query_vars['attachment'] ); }, 1); add_filter('request', function ($query_vars) { if (empty($query_vars['tw_country_iso'])) { return $query_vars; } $iso = tw_normalize_country_iso($query_vars['tw_country_iso']); if (!$iso) { return $query_vars; } $page_id = tw_country_page_for_iso($iso); if (!$page_id) { return $query_vars; } $query_vars['page_id'] = $page_id; unset($query_vars['name'], $query_vars['pagename']); return $query_vars; }); add_filter('page_link', function ($link, $post_id) { $iso = tw_normalize_country_iso(get_post_meta($post_id, 'iso_code', true)); if ($iso) { return tw_country_url($iso); } return $link; }, 10, 2); add_action('template_redirect', function () { if (is_admin() || wp_doing_ajax() || wp_doing_cron() || !is_page()) { return; } $page_id = get_queried_object_id(); if (!$page_id) { return; } $iso = tw_normalize_country_iso(get_post_meta($page_id, 'iso_code', true)); if (!$iso) { return; } $path = trim((string) parse_url($_SERVER['REQUEST_URI'] ?? '', PHP_URL_PATH), '/'); $last = strtolower(basename($path)); if ($last !== strtolower($iso)) { wp_safe_redirect(tw_country_url($iso), 301); exit; } }); if (!function_exists('tw_current_country_iso')) { function tw_current_country_iso() { $iso = tw_country_iso_from_request(); if ($iso) { return $iso; } return tw_normalize_country_iso( get_post_meta(get_queried_object_id(), 'iso_code', true) ); } }