diff --git a/includes/class-helpers.php b/includes/class-helpers.php index 2997db0..e43cc15 100644 --- a/includes/class-helpers.php +++ b/includes/class-helpers.php @@ -82,4 +82,20 @@ final class Helpers $value = \get_field($selector, $post_id, $format_value); return is_string($value) ? \do_shortcode($value) : $value; } + + public static function remove_domain_link(string $url): string + { + $parsed = parse_url($url); + if ($parsed === false || empty($parsed['scheme'])) { + return $url; + } + $scheme = strtolower((string) $parsed['scheme']); + if ($scheme !== 'http' && $scheme !== 'https') { + return $url; + } + $path = $parsed['path'] ?? ''; + $query = isset($parsed['query']) ? '?' . $parsed['query'] : ''; + $fragment = isset($parsed['fragment']) ? '#' . $parsed['fragment'] : ''; + return $path . $query . $fragment; + } } diff --git a/tests/HelpersTest.php b/tests/HelpersTest.php index 75277a1..e9cb01e 100644 --- a/tests/HelpersTest.php +++ b/tests/HelpersTest.php @@ -188,4 +188,13 @@ final class HelpersTest extends TestCase self::assertNull(Helpers::alt_get_field('anything')); } + + public function test_remove_domain_link_handles_various_url_shapes(): void + { + self::assertSame('/foo/bar/', Helpers::remove_domain_link('https://site.com/foo/bar/')); + self::assertSame('/foo?q=1#a', Helpers::remove_domain_link('http://site.com/foo?q=1#a')); + self::assertSame('/foo/', Helpers::remove_domain_link('/foo/')); + self::assertSame('mailto:x@y.com', Helpers::remove_domain_link('mailto:x@y.com')); + self::assertSame('not a url', Helpers::remove_domain_link('not a url')); + } }