使用 DDEV 在本地 WordPress 开发环境中代理媒体文件
在本地 WordPress 开发环境中代理媒体文件,对于希望确保本地站点能够反映实时生产站点的内容和功能的开发人员来说,是一项基本技能。
将所有媒体文件下载到本地环境可能不是最佳解决方案,尤其是当生产站点拥有庞大的媒体库时。相反,您可以设置本地开发环境,将媒体请求代理到生产服务器。对于本地开发,我使用的是 DDEV,这是一个开源工具,可以在几分钟内轻松启动本地 PHP 开发环境。在这篇博文中,我将分享一个我发现的在 DDEV 本地环境中代理媒体文件而无需使用插件的有用解决方案。
问题
在使用 DDEV 在本地处理 WordPress 时,我需要一种方法来显示媒体文件,而无需将其下载到本地环境。我的目标是让 WordPress 在请求这些文件时从生产服务器加载它们。
解决方案
我们可以通过将自定义函数添加到 WordPress 主题的 functions.php
文件来实现这一点。这些函数将更改附件和缩略图的 URL,使其指向生产服务器。
这是您可以添加到 functions.php
文件中的代码片段:
if ($_SERVER['HTTP_HOST'] == 'your-local-ddev-url') {
function replace_domain($url) {
return str_replace('https://your-local-ddev-url', 'https://your-production-url', $url);
}
function rewrite_attachment_url($url) {
return replace_domain($url);
}
add_filter('wp_get_attachment_url', 'rewrite_attachment_url');
function rewrite_thumbnail_attributes($attr, $attachment, $size) {
if (isset($attr['srcset'])) {
$attr['srcset'] = replace_domain($attr['srcset']);
}
return $attr;
}
add_filter('wp_get_attachment_image_attributes', 'rewrite_thumbnail_attributes', 10, 3);
}
将 your-local-ddev-url
替换为您的本地 DDEV 环境的 URL,将 your-production-url
替换为您的生产服务器的 URL。
工作原理
replace_domain
函数接收一个 URL 作为输入,并将本地域替换为生产域。rewrite_attachment_url
函数使用wp_get_attachment_url
过滤器来更改附件文件的 URL。rewrite_thumbnail_attributes
函数更改缩略图的srcset
属性。当您的主题使用具有不同尺寸的响应式图像时,这非常有用。
DDEV:本地开发的绝佳工具
DDEV 是一个开源工具,可帮助您使用 Docker 快速设置本地 PHP 开发环境。它非常易于使用,并且可以极大地加快您的开发工作流程。通过在本地 WordPress 开发中使用 DDEV,您可以确保您的环境与生产服务器保持一致,这对于避免“在我的机器上可以运行”的问题至关重要。
如果您是 DDEV 的新手,并想了解如何为 WordPress 和 Drupal 设置它,我有一个指南,将引导您完成使用 DDEV 设置本地站点的过程。请查看我之前的帖子:如何使用 DDEV 设置 WordPress 和 Drupal 本地站点。
结论
通过从生产服务器代理媒体文件,您可以节省本地开发环境中的空间和时间。当使用 DDEV 处理具有大量媒体库的大型 WordPress 站点时,此解决方案尤其有用。始终注意这可能会给生产服务器增加的负载,并确保您的生产环境能够处理额外的流量。编码愉快!