ฉันจะลบ URL ไซต์ออกจากสคริปต์และสไตล์ที่จัดคิวได้อย่างไร


9

ฉันกำลังจัดการกับปัญหา SSL และฉันต้องการตัดโดเมนจากสคริปต์และสไตล์ทั้งหมดที่ส่งออกผ่าน wp_enqueue_scripts สิ่งนี้จะส่งผลให้สคริปต์และสไตล์ทั้งหมดแสดงพร้อมกับพา ธ สัมพัทธ์จากรูทโดเมน

ฉันคิดว่ามีตะขอที่ฉันสามารถใช้ในการส่งไฟล์นี้ แต่ฉันไม่แน่ใจว่าจะใช้อันไหนหรือจะทำอย่างไร

คำตอบ:


17

คล้ายกับคำตอบของ Wyck แต่ใช้ str_replace แทน regex

script_loader_srcและstyle_loader_srcเป็นตะขอที่คุณต้องการ

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

คุณสามารถเริ่มสคริปต์ / สไตล์ URL ด้วยเครื่องหมายสแลชคู่//(" การอ้างอิงเส้นทางเครือข่าย ") สิ่งใดที่ปลอดภัยกว่า (?): ยังมีเส้นทางแบบเต็ม แต่ใช้รูปแบบ / โปรโตคอลของหน้าปัจจุบัน

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

ยอดเยี่ยมเพียงแค่ตะขอที่ฉันกำลังมองหา
Ben

มีสาเหตุใดที่ทำให้คุณยกเว้นส่วนผู้ดูแลระบบที่นี่
El Yobo

@ElYobo อาจเป็นเพราะคุณไม่ต้องการเปลี่ยนเนื้อหา HTML โดยไม่คาดคิดที่คุณต้องการแก้ไขและบันทึก นอกจากนี้โปรดทราบว่าคุณสามารถใช้ wp-cli เพื่อค้นหาและแทนที่ในฐานข้อมูลเช่นเดียวกับ:wp search-replace 'http://mydomain.tld' 'https://mydomain.tld'
surfbuds

@surfbuds ปัญหาไม่เกี่ยวข้องกับเนื้อหาเกี่ยวข้องกับสคริปต์ / สไตล์ที่โหลดในรหัส มันจะไม่ส่งผลกระทบต่อเนื้อหาที่คุณกำลังจะแก้ไขและบันทึกและทำการค้นหาและแทนที่ในฐานข้อมูลจะไม่แก้ปัญหา
El Yobo

3

ใช่ฉันคิดว่าเป็นไปได้ ดูบนตะขอกรองscript_loader_src; รับสตริงและคุณสามารถกรองได้ตามความต้องการของคุณ

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];
}
  • เขียนบนรอยขีดข่วนไม่ได้ทดสอบ

เช่นเดียวกับที่เป็นไปได้สำหรับ stylesheets โหลดบิดาผ่านทางที่มีตัวกรองwp_enqueue_stylestyle_loader_src


3

อีกวิธีหนึ่งซึ่งฉันคิดว่าฉันได้รับจากชุดรูปแบบของรากอาจสลัมเล็กน้อย แต่มีการจัดการที่ชาญฉลาดในการใช้ URL สัมพัทธ์เมื่อทำการทดสอบบนไซต์ dev เท่านั้น ประโยชน์คือสามารถใช้เป็นตัวกรองใน URL อื่น ๆ ที่ WordPress ใช้ ตัวอย่างนี้แสดงเฉพาะตัวกรองสไตล์และสคริปต์

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');
 }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.