it-swarm.com.de

Wie kann ich die Site-URL aus dem Warteschlange entfernen?

Ich habe ein SSL-Problem und möchte die Domain von allen Skripten und Stilen entfernen, die über wp_enqueue_scripts ausgegeben werden. Dies würde dazu führen, dass alle Skripte und Stile mit einem relativen Pfad zum Domänenstamm angezeigt werden.

Ich stelle mir vor, dass es einen Haken gibt, mit dem ich das filtern kann. Ich bin mir jedoch nicht sicher, welcher und wie ich das machen soll.

9
Ben

Ähnlich wie die Antwort von Wyck, jedoch mit str_replace anstelle von regex.

script_loader_src und style_loader_src sind die gewünschten Hooks.

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

Sie können die Skript-/Stil-URLs auch mit einem doppelten Schrägstrich // (einem " Netzwerkpfadverweis ") beginnen. Was sicherer sein könnte (?): Hat noch den vollständigen Pfad, verwendet aber das Schema/Protokoll der aktuellen Seite.

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

Ja, ich denke es ist möglich. Siehe auf dem Filterhaken script_loader_src; Dort bekommen Sie den String und können diesen nach Ihren Wünschen filtern.

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];
}
  • schreiben Sie auf Kratzer, nicht getestet

Gleiches gilt für Stylesheets, die über wp_enqueue_style mit filterstyle_loader_src geladen werden.

3
bueltge

Ein anderer Weg, den ich, wie ich glaube, aus dem root - Thema kenne, vielleicht ein bisschen Ghetto, hat aber einige kluge Abläufe bei der Verwendung relativer URLs (getestet nur auf der Entwickler-Website). Der Vorteil ist, dass es als Filter für viele andere in WordPress eingebaute URLs verwendet werden kann. Dieses Beispiel zeigt nur den Style- und Script-Enqueue-Filter.

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');
 }
3
Wyck