| 1 |
<?php |
| 2 |
|
| 3 |
class RabbitLoader_21_CDN |
| 4 |
{ |
| 5 |
|
| 6 |
public $cdn_prefix = ''; |
| 7 |
public $site_host = ''; |
| 8 |
|
| 9 |
public static function init() |
| 10 |
{ |
| 11 |
if (!function_exists('is_admin') || is_admin() || RabbitLoader_21_Util_WP::is_login_page()) { |
| 12 |
return; |
| 13 |
} |
| 14 |
$sr = RabbitLoader_21_Public::getSkipReason(); |
| 15 |
if ($sr == RabbitLoader_21_Public::skip_reason_ep || $sr == RabbitLoader_21_Public::skip_reason_or) { |
| 16 |
//excluded pages or RL origin pages |
| 17 |
return; |
| 18 |
} |
| 19 |
|
| 20 |
$cdn = new RabbitLoader_21_CDN(); |
| 21 |
$cdn->cdn_prefix = get_option('rabbitloader_cdn_prefix'); |
| 22 |
$cdn->site_host = parse_url(get_site_url())['host']; |
| 23 |
|
| 24 |
add_filter('script_loader_src', [$cdn, 'replaceAssetHost'], 10, 1); |
| 25 |
add_filter('style_loader_src', [$cdn, 'replaceAssetHost'], 10, 1); |
| 26 |
add_filter('wp_get_attachment_url', [$cdn, 'replaceAssetHost'], 10, 1); |
| 27 |
add_filter('wp_calculate_image_srcset', function ($sources) use($cdn){ |
| 28 |
if(!is_admin()) { |
| 29 |
foreach ($sources as &$source) { |
| 30 |
if(!empty($source['url'])){ |
| 31 |
$source['url'] = $cdn->replaceAssetHost($source['url']); |
| 32 |
} |
| 33 |
} |
| 34 |
} |
| 35 |
return $sources; |
| 36 |
}, 10, 1); |
| 37 |
} |
| 38 |
|
| 39 |
public function replaceAssetHost($original_src) |
| 40 |
{ |
| 41 |
if (empty($this->cdn_prefix)) { |
| 42 |
return $original_src; |
| 43 |
} |
| 44 |
$parsed_url = parse_url($original_src); |
| 45 |
if (!empty($parsed_url['host']) && $parsed_url['host'] == $this->site_host) { |
| 46 |
$parsed_url['host'] = $this->cdn_prefix; |
| 47 |
$parsed_url['scheme'] = "https"; |
| 48 |
return sprintf( |
| 49 |
'%s://%s%s%s%s', |
| 50 |
$parsed_url['scheme'], |
| 51 |
$parsed_url['host'], |
| 52 |
$parsed_url['path'], |
| 53 |
!empty($parsed_url['query']) ? '?' . $parsed_url['query'] : '', |
| 54 |
!empty($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : '' |
| 55 |
); |
| 56 |
} |
| 57 |
} |
| 58 |
} |
| 59 |
|