대기열에 포함 된 스크립트 및 스타일에서 사이트 URL을 제거하려면 어떻게해야합니까?


9

SSL 문제를 다루고 있으며 wp_enqueue_scripts를 통해 출력되는 모든 스크립트 및 스타일에서 도메인을 제거하고 싶습니다. 이로 인해 모든 스크립트와 스타일이 도메인 루트의 상대 경로와 함께 표시됩니다.

필자는 이것을 제출하는 데 사용할 수있는 후크가 있다고 생각하지만 어느 것이, 어떻게 진행 해야할지 잘 모르겠습니다.

답변:


17

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

내가 찾고 있던 후크 만 훌륭합니다.
Ben

여기서 관리자 섹션을 제외하고 싶은 특별한 이유가 있습니까?
El Yobo

@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_style필터 를 사용 하여 로드하십시오 style_loader_src.


3

루트 테마 에서 얻은 또 다른 방법 은 약간 빈민가이지만 상대 URL을 사용할 때 (dev 사이트에서만 테스트 됨)에 대한 현명한 처리 방법이 있습니다. 장점은 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');
 }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.