$urls Raw URLs. * @return array */ public static function normalize_all( array $urls ): array { $out = []; foreach ( $urls as $url ) { if ( ! is_string( $url ) ) { continue; } $normalized = self::normalize( $url ); if ( '' !== $normalized ) { $out[ $normalized ] = true; } } return array_keys( $out ); } public static function site_scheme(): string { $scheme = wp_parse_url( home_url(), PHP_URL_SCHEME ); return is_string( $scheme ) && '' !== $scheme ? strtolower( $scheme ) : 'http'; } /** * @param string $url Absolute URL. */ public static function is_same_host( string $url ): bool { $host = wp_parse_url( $url, PHP_URL_HOST ); $home = wp_parse_url( home_url(), PHP_URL_HOST ); return is_string( $host ) && is_string( $home ) && strtolower( $host ) === strtolower( $home ); } /** * @param string $url Absolute URL. * @return array */ public static function feed_variants( string $url ): array { if ( str_contains( $url, '?' ) ) { return []; } $base = self::with_trailing_slash( $url ); return [ $base . 'feed/', $base . 'feed/atom/', $base . 'feed/rdf/', ]; } /** * @param string $url Absolute URL. */ public static function with_trailing_slash( string $url ): string { $query = ''; $mark = strpos( $url, '?' ); if ( false !== $mark ) { $query = substr( $url, $mark ); $url = substr( $url, 0, $mark ); } return rtrim( $url, '/' ) . '/' . $query; } }