子域名多站点中wp_get_attachment_image_src获取裁剪图地址失败求助
问题原因及解决方案
你遇到的问题核心很明确:wp_get_attachment_image_src() 这个函数返回的是一个数组,不是直接的图片URL字符串。当你直接把这个数组赋值给<img>的src属性时,PHP会自动将数组转换为字符串"Array",这就导致了页面上出现<img src="Array"...>的错误效果。
函数返回值的结构
wp_get_attachment_image_src() 成功执行时会返回一个包含3个元素的数组:
- 索引
0:裁剪后图片的完整URL(这才是你需要的src值) - 索引
1:图片的宽度(像素值) - 索引
2:图片的高度(像素值)
如果找不到对应附件或裁剪尺寸,函数会返回false。
正确的处理方式
你需要先判断函数返回值是否有效,再提取数组中的URL元素。下面是修正后的代码示例:
// 假设你已经获取到目标附件的ID,比如从主题选项或自定义字段中 $avatar_attachment_id = get_theme_mod('header_avatar'); // 示例:从主题自定义选项取ID // 替换成你需要的裁剪尺寸(比如你注册过的'header-avatar-size',或者默认的'thumbnail'/'medium'等) $image_data = wp_get_attachment_image_src($avatar_attachment_id, 'header-avatar-size'); // 先检查是否成功获取到图片数据 if ($image_data) { // 提取数组中的URL元素 $avatar_url = $image_data[0]; // 输出img标签,记得用esc_url()转义URL确保安全 echo '<img src="' . esc_url($avatar_url) . '" alt="Blog Title" class="header-avatar">'; } else { // 可选:如果图片不存在,显示默认头像 echo '<img src="' . esc_url(get_template_directory_uri() . '/assets/images/default-avatar.png') . '" alt="Blog Title" class="header-avatar">'; }
额外注意事项(针对子域名多站点环境)
- 裁剪尺寸注册:确保你使用的裁剪尺寸已经通过
add_image_size()在当前主题的functions.php中注册,并且已经对现有附件重新生成了缩略图(可以用Regenerate Thumbnails这类工具)。 - 多站点附件隔离:子域名多站点中,附件是按站点独立存储的,要确保你调用的附件ID确实属于当前站点,跨站点调用会返回
false。 - 权限与路径:检查当前站点的uploads目录权限是否正常,避免因为文件权限问题导致图片无法读取。
内容的提问来源于stack exchange,提问作者Galgóczi Levente
相关产品推荐
相关产品推荐

