¿Cómo puedo eliminar la URL del sitio de los estilos y scripts en cola?

9

Estoy lidiando con un problema de SSL y me gustaría quitar el dominio de todos los scripts y estilos que se generan a través de wp_enqueue_scripts. Esto daría lugar a que todos los scripts y estilos se muestren con una ruta relativa desde la raíz del dominio.

Me imagino que hay un gancho que puedo usar para fileter esto, sin embargo, no estoy seguro de cuál, ni de cómo hacerlo.

    
pregunta bhays 29.03.2012 - 06:51

3 respuestas

15

Similar a la respuesta de Wyck, pero usando str_replace en lugar de expresiones regulares.

script_loader_src y style_loader_src son los ganchos que deseas.

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

También puede iniciar las URL de estilo / secuencia de comandos con una barra doble // (una " referencia de la ruta de red "). ¿Cuál podría ser más seguro (?): Aún tiene la ruta completa, pero usa el esquema / protocolo de la página actual.

<?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 );
}
    
respondido por el chrisguitarguy 29.03.2012 - 19:22
3

Sí, creo que es posible. Ver en el gancho de filtro script_loader_src ; obtén la cadena y puedes filtrar esto para tus requisitos.

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];
}
  • escribir en cero, no probado

Lo mismo es posible para las hojas de estilo, ya que se cargan a través de wp_enqueue_style con el filtro style_loader_src .

    
respondido por el bueltge 29.03.2012 - 08:28
3

Otra forma, que creo que obtuve del tema roots , tal vez un poco de ghetto, pero tiene un manejo inteligente sobre cuándo usar las URL relativas (probado solo en el sitio de desarrollo). La ventaja es que se puede usar como filtro en muchas otras URL integradas que usa WordPress. Este ejemplo solo muestra el estilo y el filtro de cola de comandos.

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');
 }
    
respondido por el Wyck 29.03.2012 - 08:44

Lea otras preguntas en las etiquetas