¿Cómo puedo eliminar la URL del sitio de los scripts y estilos 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 como resultado 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 archivar esto, sin embargo, no estoy seguro de cuál, ni cómo hacerlo.

Ben
fuente

Respuestas:

17

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

script_loader_srcy style_loader_srcson los ganchos que quieres.

<?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 secuencia de comandos / estilo con una barra doble //(una " referencia de ruta de red "). Lo que podría ser más seguro (?): Todavía 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 );
}
chrisguitarguy
fuente
Excelente, solo los ganchos que estaba buscando.
Ben
¿Alguna razón particular por la que estás excluyendo la sección de administrador aquí?
El Yobo
@ElYobo Probablemente porque no desea cambiar inesperadamente el contenido HTML que está a punto de editar y guardar. También tenga en cuenta que puede usar wp-cli para buscar y reemplazar en la base de datos como en:wp search-replace 'http://mydomain.tld' 'https://mydomain.tld'
surfbuds
@surfbuds El problema no está relacionado con el contenido, está relacionado con los scripts / estilos cargados en el código. No afectará el contenido que está a punto de editar y guardar, y hacer una búsqueda y reemplazar en la base de datos tampoco resolverá el problema.
El Yobo
3

Sí, creo que es posible. Ver en el gancho del filtro script_loader_src; allí obtiene la cadena y puede filtrar esto según sus 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, carga wp_enqueue_stylecon filtro style_loader_src.

bueltge
fuente
3

Otra forma, que creo que obtuve del tema de las raíces , tal vez un poco gueto, pero tiene un manejo inteligente sobre cuándo usar URL relativas (probado solo en el sitio de desarrollo). El beneficio es que puede usarse como filtro en muchas otras URL integradas que usa WordPress. Este ejemplo solo muestra el filtro de cola de estilo y secuencia 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');
 }
Wyck
fuente