如何从排队的脚本和样式中删除网站URL?


9

我正在处理SSL问题,我想从通过wp_enqueue_scripts输出的所有脚本和样式中删除域。这将导致显示所有脚本和样式,并带有来自域根目录的相对路径。

我想我可以使用一个钩子来解决这个问题,但是,我不确定哪个钩子,也不确定如何去做。

Answers:


17

与Wyck的答案类似,但是使用str_replace而不是regex。

script_loader_src并且style_loader_src是您想要的钩子。

<?php
add_filter( 'script_loader_src', 'wpse47206_src' );
add_filter( 'style_loader_src', 'wpse47206_src' );
function wpse47206_src( $url )
{
    if( is_admin() ) return $url;
    return str_replace( site_url(), '', $url );
}

您也可以以双斜杠//(“ 网络路径参考 ”)开头的脚本/样式URL 。哪个更安全(?):仍然具有完整路径,但使用当前页面的方案/协议。

<?php
add_filter( 'script_loader_src', 'wpse47206_src' );
add_filter( 'style_loader_src', 'wpse47206_src' );
function wpse47206_src( $url )
{
    if( is_admin() ) return $url;
    // why pass by reference on count? last arg
    return str_replace( array( 'http:', 'https:' ), '', $url, $c=1 );
}

太好了,就是我要找的钩子。
2012年

您要排除此处的“管理”部分有任何特殊原因吗?
El

@ElYobo可能是因为您不想意外更改将要编辑和保存的HTML内容。还要注意,您可以使用wp-cli在数据库中进行查找和替换,如下所示:wp search-replace 'http://mydomain.tld' 'https://mydomain.tld'
surfbuds

@surfbuds问题与内容无关,与代码中加载的脚本/样式有关。它不会影响您将要编辑和保存的内容,并且在数据库中进行搜索和替换同样不会解决该问题。
El Yobo

3

是的,我认为有可能。参见过滤钩script_loader_src; 那里得到的字符串,您可以过滤此为您的要求。

add_filter( 'script_loader_src', 'fb_filter_script_loader', 1 );
function fb_filter_script_loader( $src ) {

    // remove string-part "?ver="
    $src = explode( '?ver=', $src );

    return $src[0];
}
  • 从头开始,未经测试

对于样式表,也可以通过wp_enqueue_stylefilter进行加载style_loader_src


3

我认为我是从roots主题获得的另一种方法,也许有点贫民窟,但对何时使用相对URL进行了一些巧妙的处理(仅在开发站点上进行了测试)。好处是它可以用作WordPress使用的许多其他内置URL的过滤器。此示例仅显示样式和脚本入队筛选器。

function roots_root_relative_url($input) {
  $output = preg_replace_callback(
    '!(https?://[^/|"]+)([^"]+)?!',
    create_function(
      '$matches',
      // if full URL is site_url, return a slash for relative root
      'if (isset($matches[0]) && $matches[0] === site_url()) { return "/";' .
      // if domain is equal to site_url, then make URL relative
      '} elseif (isset($matches[0]) && strpos($matches[0], site_url()) !== false) { return $matches[2];' .
      // if domain is not equal to site_url, do not make external link relative
      '} else { return $matches[0]; };'
    ),
    $input
  );

  /**
   * Fixes an issue when the following is the case:
   * site_url() = http://yoursite.com/inc
   * home_url() = http://yoursite.com
   * WP_CONTENT_DIR = http://yoursite.com/content
   * http://codex.wordpress.org/Editing_wp-config.php#Moving_wp-content
   */
  $str = "/" . end(explode("/", content_url()));
  if (strpos($output, $str) !== false) {
    $arrResults = explode( $str, $output );
    $output = $str . $arrResults[1];
  }

  return $output;

if (!is_admin()) {
  add_filter('script_loader_src', 'roots_root_relative_url');
  add_filter('style_loader_src', 'roots_root_relative_url');
 }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.