私はSSLの問題を扱っています、そして私はwp_enqueue_scriptsを通して出力されるすべてのスクリプトとスタイルからドメインを取り除きたいです。これにより、すべてのスクリプトとスタイルがドメインルートからの相対パスで表示されます。
私はこれをフィルタリングするために使用できるフックがあると想像します、しかし、私はどれがそれをどのようにしてやるべきかについて確信が持てません。
Wyckの答えに似ていますが、正規表現の代わりにstr_replaceを使います。
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 );
}
はい、可能だと思います。フィルタフック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];
}
同じことがスタイルシートでも可能です、そしてそれはfilterwp_enqueue_style
とstyle_loader_src
を通してロードします。
roots テーマから得たもう1つの方法は、多少のゲットーかもしれませんが、相対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');
}