WordPress开发:使用wp_get_attachment_image_src获取特色图出现重复URL
这个重复域名的坑我之前踩过好几次,结合你描述的情况(数据库wp_options里的siteurl和home配置都正确),可以从这几个方向排查解决:
检查特色图的调用代码是否规范
很多时候这种问题是因为手动拼接URL,而没有用WordPress官方提供的函数。比如你可能写了类似这样的错误代码:<?php echo get_option('siteurl') . get_post_meta(get_the_ID(), '_wp_attached_file', true); ?>如果
_wp_attached_file字段已经存储了完整的图片URL(比如之前误操作导致),就会出现域名重复。正确的做法是用官方函数获取特色图URL:// 获取当前文章的特色图URL(full表示原图尺寸) <?php echo get_the_post_thumbnail_url(get_the_ID(), 'full'); ?>或者用
wp_get_attachment_image_url()直接获取附件URL:<?php $thumbnail_id = get_post_thumbnail_id(get_the_ID()); echo wp_get_attachment_image_url($thumbnail_id, 'full'); ?>验证媒体库中图片的原始URL
登录WordPress后台,进入“媒体库”找到那张特色图,点击“编辑”查看右侧的“文件URL”字段。如果这里显示的URL已经是重复域名的,那说明上传时就出了问题。可以尝试删除这张图片,重新上传,看新生成的URL是否正常。排查主题/插件的URL过滤逻辑
有些主题或者自定义插件会通过wp_get_attachment_url、post_thumbnail_html这类过滤器来修改图片URL。如果过滤函数里错误地重复拼接了站点URL,就会导致这个问题。你可以先临时切换到WordPress默认主题(比如Twenty Twenty-Four),刷新首页看特色图URL是否恢复正常:- 如果正常,那就是当前主题的代码有问题,去主题的
functions.php文件里找相关的过滤函数排查; - 如果还是有问题,就禁用所有插件,逐个启用排查是哪个插件导致的。
- 如果正常,那就是当前主题的代码有问题,去主题的
重置固定链接设置
有时候固定链接的规则缓存会干扰URL生成。进入后台“设置→固定链接”,随便选择一个不同的规则(比如“文章名”改成“朴素”),点击“保存更改”,然后再改回原来的规则并保存。这个操作会刷新WordPress的重写规则,可能修复URL生成的异常。清空缓存(如果有使用缓存工具)
如果你的站点用了缓存插件(比如WP Rocket、W3 Total Cache)或者本地服务器有缓存机制,可能缓存了错误的URL。先清空所有缓存,再刷新首页测试。
内容的提问来源于stack exchange,提问作者Hex1189

