Як я можу видалити URL-адресу сайту із зав'язаних сценаріїв та стилів?


9

Я маю справу з проблемою SSL, і я хотів би позбавити домен від усіх сценаріїв та стилів, що виводяться через wp_enqueue_scripts. Це призведе до того, що всі сценарії та стилі відображатимуться відносним шляхом від кореня домену.

Я гадаю, є гачок, який я можу використовувати для того, щоб це зафіксувати, однак я не впевнений, який з них, і як це зробити.

Відповіді:


17

Схожа на відповідь Віка, але використовуючи 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 );
}

Відмінно, просто гачки, які я шукав.
Бен

Якась конкретна причина, що ви виключаєте тут розділ адміністратора?
El Yobo

@ElYobo Можливо, тому що ви не хочете несподівано змінювати вміст HTML, який ви збираєтесь редагувати та зберігати. Також зверніть увагу , ви можете використовувати сор-клі , щоб зробити пошук і заміна в базі даних , як в:wp search-replace 'http://mydomain.tld' 'https://mydomain.tld'
surfbuds

@surfbuds Проблема не стосується вмісту, вона стосується скриптів / стилів, завантажених у код. Це не вплине на вміст, який ви збираєтеся редагувати та зберігати, а пошук і заміна в базі даних також не вирішить проблему.
Ель Йобо

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-адреси (перевірений лише на сайті розробників). Перевага полягає в тому, що він може використовуватись як фільтр для багатьох інших вбудованих URL-адрес, якими користується WordPress. Цей приклад показує лише фільтр стилів і сценаріїв.

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');
 }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.