我将其发布到了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/

10-13 00:44