我将其发布到了wordpress堆栈交换中,但我也认为将其发布到此处是个好主意
您好,我发现一个函数,当将其放置在functions.php中时,会将整个样式表注入网站的头部:
add_action( 'wp_head', 'internal_css_print' );
function internal_css_print() {
echo '<style>';
include_once get_template_directory() . '/style.css';
echo '</style>';
}
它工作得很好,整个样式表都可以正常使用,但是一个小问题是CSS中的网址已损坏。例如,当css文件中包含以下内容时:
background: url('images/hero-desktop.jpg');
当样式表正常链接时,此方法返回
http://localhost:8888/wp-content/themes/my-theme/images/hero-desktop.jpg
->但是,当样式表注入头部时,它返回:
http://localhost:8888/images/hero-desktop.jpg
->不起作用。路径已损坏。为了解决这个问题,我可以做一个简单的搜索并替换成CSS,将
url('
更改为url('/wp-content/themes/my-theme/
,但是必须有更好的方法。所以我想在顶部添加一些功能,因此在将整个css文件拆分到头部之前,它会动态地将url路径从
url(/images/)
更改为/wp-content/themes/my-theme/images/
。如果可能的话,那就太好了,因此只需一次设置即可,而不是在已经开发的站点上搜索和替换CSS。谢谢!
最佳答案
一种选择是使用wp_add_inline_style()
扩展现有样式表。这可能是执行此操作的“最正确”方法:
add_action( 'wp_enqueue_scripts', 'add_custom_styles' );
function add_custom_styles(){
$style_handle = 'style';
$custom_css = 'body {
background: url('. get_stylesheet_directory_uri() .'/images/hero-desktop.jpg);
}';
wp_add_inline_style( $style_handle, $custom_css );
}
当然,用要扩展的样式表的句柄替换
style
。这样做的另一种方法是使用“ PHP CSS”文件,如下所示:
add_action( 'wp_head', 'print_internal_css' );
function print_internal_css(){
echo '<style>';
include get_stylesheet_directory().'/style.css.php';
echo '</style>';
}
style.css.php:
body {
background: url( <?= get_stylesheet_directory_uri() .'/images/hero-desktop.jpg'; ?> );
}
最后,如果您只想快速修复现有内容,则可以通过简单的
str_replace
函数运行文件,并使用file_get_contents
或cURL请求代替include:add_action( 'wp_head', 'print_internal_css' );
function print_internal_css(){
echo '<style>';
$styles = file_get_contents( get_stylesheet_directory().'/style.css' );
echo str_replace( "url('", "url('/wp-content/themes/my-theme/", $styles );
echo '</style>';
}
关于php - 在WordPress中动态更改样式表中的URL路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50918350/