You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子域名多站点中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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:22:29