WordPress Version: 6.1
/**
* Makes URLs relative to the WordPress installation.
*
* @since 5.9.0
* @access private
*
* @param string $css The CSS to make URLs relative to the WordPress installation.
* @param string $stylesheet_url The URL to the stylesheet.
*
* @return string The CSS with URLs made relative to the WordPress installation.
*/
function _wp_normalize_relative_css_links($css, $stylesheet_url)
{
$has_src_results = preg_match_all('#url\s*\(\s*[\'"]?\s*([^\'"\)]+)#', $css, $src_results);
if ($has_src_results) {
// Loop through the URLs to find relative ones.
foreach ($src_results[1] as $src_index => $src_result) {
// Skip if this is an absolute URL.
if (0 === strpos($src_result, 'http') || 0 === strpos($src_result, '//')) {
continue;
}
// Skip if the URL is an HTML ID.
if (str_starts_with($src_result, '#')) {
continue;
}
// Skip if the URL is a data URI.
if (str_starts_with($src_result, 'data:')) {
continue;
}
// Build the absolute URL.
$absolute_url = dirname($stylesheet_url) . '/' . $src_result;
$absolute_url = str_replace('/./', '/', $absolute_url);
// Convert to URL related to the site root.
$relative_url = wp_make_link_relative($absolute_url);
// Replace the URL in the CSS.
$css = str_replace($src_results[0][$src_index], str_replace($src_result, $relative_url, $src_results[0][$src_index]), $css);
}
}
return $css;
}