Bagaimana saya bisa menghapus URL situs dari skrip dan gaya enqueued?

9

Saya sedang berurusan dengan masalah SSL dan saya ingin menghapus domain dari semua skrip dan gaya menjadi output melalui wp_enqueue_scripts. Ini akan menghasilkan semua skrip dan gaya yang ditampilkan dengan jalur relatif dari root domain.

Saya membayangkan ada sebuah kait yang dapat saya gunakan untuk fileter ini, namun, saya tidak yakin yang mana, atau bagaimana cara mengatasinya.

Ben
sumber

Jawaban:

17

Mirip dengan jawaban Wyck, tetapi menggunakan str_replace bukan regex.

script_loader_srcdan style_loader_srckait yang Anda inginkan.

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

Anda juga dapat memulai skrip / URL gaya dengan garis miring ganda //(" referensi jalur jaringan "). Yang mungkin lebih aman (?): Masih memiliki path lengkap, tetapi menggunakan skema / protokol halaman saat ini.

<?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
sumber
Luar biasa, hanya kait yang saya cari.
Ben
Adakah alasan khusus mengapa Anda mengecualikan bagian admin di sini?
El Yobo
@ Elobob Mungkin karena Anda tidak ingin secara tak terduga mengubah konten HTML yang akan Anda edit dan simpan. Juga perhatikan Anda dapat menggunakan wp-cli untuk mencari dan mengganti dalam database seperti pada:wp search-replace 'http://mydomain.tld' 'https://mydomain.tld'
surfbuds
@surfbuds Masalah ini tidak terkait dengan konten, ini terkait dengan skrip / gaya yang dimuat dalam kode. Itu tidak akan memengaruhi konten yang akan Anda edit dan simpan dan lakukan pencarian dan ganti dalam basis data juga tidak akan menyelesaikan masalah.
El Yobo
3

Ya, saya pikir itu mungkin. Lihat pada kait saringan script_loader_src; di sana dapatkan string dan Anda dapat memfilter ini untuk kebutuhan Anda.

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];
}
  • tulis di awal, tidak diuji

Hal yang sama dimungkinkan untuk stylesheet, memuat melalui wp_enqueue_styledengan filter style_loader_src.

bueltge
sumber
3

Cara lain, yang saya pikir saya dapatkan dari tema root , mungkin sedikit ghetto tetapi memiliki beberapa penanganan cerdas tentang kapan harus menggunakan url relatif (diuji hanya di situs dev). Keuntungannya adalah dapat digunakan sebagai filter pada banyak url bawaan lainnya yang digunakan WordPress. Contoh ini hanya menampilkan filter enqueue gaya dan skrip.

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
sumber