如何让add_image_size对get_theme_file_uri调用的默认图片生效?
问题核心原因
get_theme_file_uri() 仅返回字符串格式的图片URL,不包含WordPress媒体库的附件尺寸数组结构,你之前尝试直接从字符串取sizes字段的写法自然会报错。
你当前使用 wp_get_attachment_image_src() 的方案合理性
这个方案是完全可行的,属于WordPress官方推荐的标准写法,前提是你已经将默认占位图上传到了站点媒体库,且代码中填写的附件ID(你示例中的158)正确。
- 优势:自动调用你注册的
box_bg_image裁剪规格,后续更换默认图仅需替换媒体库对应ID的资源即可,无需修改业务代码 - 注意点:站点迁移、删除媒体库对应资源会导致默认图失效,建议加兜底逻辑
优化后的完整代码示例
<?php $image = get_field('box_image'); $default_attachment_id = 158; // 媒体库默认占位图的附件ID $img_url = ''; if (!empty($image)) { // ACF返回有效图片时调用自定义尺寸 $img_url = esc_url($image['sizes']['box_bg_image']); } else { // 读取默认图的自定义尺寸资源 $default_img = wp_get_attachment_image_src($default_attachment_id, 'box_bg_image'); if ($default_img) { $img_url = esc_url($default_img[0]); } else { // 兜底逻辑:媒体库默认图失效时加载主题目录原生图 $img_url = esc_url(get_theme_file_uri('/assets/images/img.jpg')); } } ?> <img src="<?php echo $img_url; ?>" alt="" />
可选替代方案(无需依赖媒体库附件ID)
如果不想将默认图存入媒体库、避免ID变动导致的问题,可以直接用固定宽高属性配合现有CSS实现,前提是你存放在主题目录的默认图本身已经按250*180的比例裁剪好:
<?php $image = get_field('box_image'); if (!empty($image)) { ?> <img src="<?php echo esc_url($image['sizes']['box_bg_image']); ?>" alt="" /> <?php } else { ?> <!-- 直接指定宽高属性,配合CSS的width:100%实现等比渲染 --> <img src="<?php echo esc_url(get_theme_file_uri('/assets/images/img.jpg')); ?>" width="250" height="180" alt="" /> <?php } ?>
额外注意事项
- 你在
functions.php中注册add_image_size后,之前已经上传的图片需要重新生成缩略图才会生成对应规格的裁剪版本,新上传的资源会自动处理 - 确保ACF图片字段的返回格式设置为「数组」,否则无法读取
sizes下的自定义尺寸参数
内容的提问来源于stack exchange,提问作者Krys
相关产品推荐
相关产品推荐

