Come posso rimuovere l'URL del sito da script e stili accodati?


9

Ho a che fare con un problema SSL e vorrei eliminare il dominio da tutti gli script e gli stili in uscita tramite wp_enqueue_scripts. Ciò comporterebbe la visualizzazione di tutti gli script e gli stili con un percorso relativo dalla radice del dominio.

Immagino che ci sia un gancio che posso usare per filtrare questo, tuttavia, non sono sicuro di quale, né come procedere.

Risposte:


17

Simile alla risposta di Wyck, ma usando str_replace invece di regex.

script_loader_srce style_loader_srcsono i ganci che vuoi.

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

È inoltre possibile avviare gli URL di script / stile con una doppia barra //(un " riferimento al percorso di rete "). Quale potrebbe essere più sicuro (?): Ha ancora il percorso completo, ma utilizza lo schema / protocollo della pagina corrente.

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

Eccellente, solo i ganci che stavo cercando.
Ben

Qualche motivo particolare per cui stai escludendo la sezione admin qui?
El Yobo,

@ElYobo Probabilmente perché non vuoi cambiare inaspettatamente il contenuto HTML che stai per modificare e salvare. Nota anche che puoi usare wp-cli per trovare e sostituire nel database come in:wp search-replace 'http://mydomain.tld' 'https://mydomain.tld'
surfbuds

@surfbuds Il problema non è relativo al contenuto, è legato agli script / stili caricati nel codice. Non influirà sul contenuto che si sta per modificare e salvare e fare una ricerca e sostituire nel database non risolverà il problema.
El Yobo,

3

Sì, penso che sia possibile. Vedi sul gancio del filtro script_loader_src; ottieni la stringa e puoi filtrarla per le tue esigenze.

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];
}
  • scrivere su zero, non testato

Lo stesso è possibile per i fogli di stile, quindi caricarli wp_enqueue_stylecon un filtro style_loader_src.


3

Un altro modo, che penso di aver preso dal tema delle radici , forse un po 'ghetto, ma ha una gestione intelligente su quando usare gli URL relativi (testato solo sul sito di sviluppo). Il vantaggio è che può essere utilizzato come filtro su molti altri URL integrati utilizzati da WordPress. Questo esempio mostra solo il filtro accodamento stile e script.

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');
 }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.