Change Image URL to a CDN

时间:2017-06-13 作者:Ranknoodle

运行NGINX,Wordpress 4.75从旧版本的Wordpress升级后,我们的图像将在本地提供,我想将其更改为我们的CDN。

在过去,上传到博客的图像是使用插件直接上传到我们的CDN的(我想卸载S3 Lite)。

我的目标是,我希望张贴的图像,缩略图等URL是从我们的CDN,而不是本地服务。

例如,我有:https://test.com/blog/wp-content/uploads/2016/07/Wedding1-370x215.jpg

需要指出:https://cdn.test.com/blog/wp-content/uploads/2016/07/Wedding1-370x215.jpg

在wordpress站点(暂时没有更新)将图像直接上传到CDN之前(AWS S3->Cloudfront),现在我们升级到4.75,得到的图像指向本地url,而不是我们的CDN url。

图像通过以下功能提供:the\\u post\\u thumbnail()

我相信它在引擎盖下使用了wp\\u get\\u attachment\\u图像。如果我可以在函数中包含函数。php重写图像URL也可以。

那么,如何让图像url指向我们的CDN而不是本地url呢?

谢谢你的帮助!

2 个回复
SO网友:Den Isahac

自主要采用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);

SO网友:Morgan Estes

您可能想使用wp_get_attachment_thumb_url 筛选以重写附加到帖子的图像(如特色图像或通过media manager添加的图像)

如果内容中有其他图像(例如有人复制并粘贴了带有图像标记的HTML),则可以过滤the_content 并使用RegEx替换这些URL,但希望不会经常遇到这种情况。

结束

相关推荐

Featured images get shrunken

上传特色图片时,我遇到的问题是,所有图片都会自动缩小。我想保留原始图像。检查this example. 所有员工的图片都会自动缩小,但在特色图片中,我上传了员工的完整图片。我认为图像太大,wordpress会自动缩小图像,因此,我在媒体库中缩放并裁剪了图像。一些图像已修复,但一些图像仍然存在问题。有没有一种方法可以让原始上传的图像按原样显示?