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

时间:2012-03-29 作者:Ben

我正在处理一个SSL问题,我想将域从通过wp\\U enqueue\\U脚本输出的所有脚本和样式中剥离出来。这将导致所有脚本和样式都显示在域根目录的相对路径中。

我想我可以用一个钩子来过滤这个,然而,我不知道是哪一个,也不知道如何去做。

3 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

与Wyck的答案类似,但使用str\\u replace代替regex。

script_loader_srcstyle_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// (a)“;network path reference"E;)。哪个可能更安全(?):仍具有完整路径,但使用当前页面的方案/协议。

<?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 );
}

SO网友:bueltge

是的,我认为这是可能的。请参见滤清器挂钩上的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_style 带过滤器style_loader_src.

SO网友:Wyck

另一种方式,我想我是从根主题中得到的,可能有点贫民化,但在何时使用相对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\');
 }

结束

相关推荐