自主要采用Responsive Images 以及新增srcset
属性到<img>
要素WordPress也必须发展。WordPress 4.4增加了响应图像功能。
如果您检查src
属性它可能指向CDN,但是,您仍然需要考虑srcset
属性,该属性可能仍在使用图像的本地版本。
首先,我们需要提供将本地URL更改为CDN版本的算法。我使用的算法符合上面的测试用例;i、 e。https://test.com/ 到https://cdn.test.com/
将这些添加到functions.php
// Add .cdn after http:// or https://
function to_cdn($src) {
$dslash_pos = strpos($src, \'//\') + 2;
$src_pre = substr($src, 0, $dslash_pos); // http:// or https://
$src_post = substr($src, $dslash_pos); // The rest after http:// or https://
return $src_pre . \'cdn.\' . $src_post;
}
那么我们需要改变
src
使用
wp_get_attachment_image_src 滤器
function test_get_attachment_image_src($image, $attachment_id, $size, $icon) {
if(!is_admin()) {
if(!image) {
return false;
}
if(is_array($image)) {
$src = to_cdn($image[0]); // To CDN
$width = $image[1];
$height = $image[2];
return [$src, $width, $height, true];
} else {
return false;
}
}
return $image;
}
add_filter(\'wp_get_attachment_image_src\', \'test_get_attachment_image_src\', 10, 4);
接下来是
srcset
这次使用属性
wp_calculate_image_srcset 滤器
function test_calculate_image_srcset($sources, $size_array, $image_src, $image_meta, $attachment_id) {
if(!is_admin()) {
$images = [];
foreach($sources as $source) {
$src = to_cdn($source[\'url\']); // To CDN
$images[] = [
\'url\' => $src,
\'descriptor\' => $source[\'descriptor\'],
\'value\' => $source[\'value\']
];
}
return $images;
}
return $sources;
}
add_filter(\'wp_calculate_image_srcset\', \'test_calculate_image_srcset\', 10, 5);