我计划创建一个wordpress插件,将上传的图像卸载到外部网站,并从那里显示它们。
到目前为止我所做的:
1) 每当上传图像时,我的自定义函数就会触发,并将图像(包括缩略图)上载到外部站点,并将URL存储到数据库。
这里没有问题。但是我如何告诉wordpress而不是显示默认图像url显示我的url?我只是在寻找正确的过滤器/挂钩。我在谷歌上搜索了12个小时,仍然没有找到正确的答案。
我想要的是,无论何时请求图像,过滤器都会更改:
http://localhost/wordpress/wp-content/uploads/2019/03/dog-1200x1108.png
至
http://example.com/BAHIAPJGJSHSH.png
有2个插件可以实现这一点:
DigitalOcean Spaces Sync 和
WP Offload Media这2个插件可以做到这一点,尽管我正在尝试在另一个图像宿主中实现它。我试着查找源代码,但没有找到答案。
谁能给我指一下正确的方向吗?wordpress如何显示图像?如何通过过滤器更改url?
最合适的回答,由SO网友:ggedde 整理而成
您很可能希望使用过滤器。主要问题是开发人员需要确保使用正确的函数,如“The\\u post\\u thumbnail()”等。您可以使用wp\\u get\\u attachment\\u urlhttps://codex.wordpress.org/Function_Reference/wp_get_attachment_url
我在进行本地开发时使用此选项,但希望从生产服务器加载所有本地映像,因为我的本地计算机上没有任何映像。
if($_SERVER[\'REMOTE_ADDR\'] === \'127.0.0.1\')
{
// Replace src paths
add_filter(\'wp_get_attachment_url\', function ($url)
{
if(file_exists($url))
{
return $url;
}
return str_replace(WP_HOME, \'https://www.some-production-site.com\', $url);
});
// Replace srcset paths
add_filter(\'wp_calculate_image_srcset\', function($sources)
{
foreach($sources as &$source)
{
if(!file_exists($source[\'url\']))
{
$source[\'url\'] = str_replace(WP_HOME, \'https://www.some-production-site.com\', $source[\'url\']);
}
}
return $sources;
});
}