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

WordPress get_the_post_thumbnail_url 在AMP环境下调用全尺寸缩略图失效

WordPress AMP 页全尺寸文章缩略图调用异常解决

定位可直接修正的代码问题

  • 变量命名大小写不统一:AMP 分支内交替使用$nextID、$next_id两个变量,PHP 对变量名大小写敏感,二者无法被识别为同一对象,很容易导致传入缩略图函数的文章 ID 为空,直接返回异常结果
  • 尺寸参数非核心标准值:WordPress 核心原生定义的全尺寸图片固定键值为full,代码中使用的fullsize并不是核心内置的有效尺寸标识。非 AMP 环境下能正常运行,基本是主题或第三方插件额外为fullsize做了尺寸映射兼容,进入 AMP 环境后相关兼容逻辑未正常加载,参数就会失效

AMP 专属拦截的解决方案

仅在 AMP 页面触发的异常,本质是官方 AMP 插件默认开启的图片优化功能在起作用:该功能会对页面内所有图片 URL 触发全局过滤钩子,自动将超出 AMP 适配阈值的原图替换为站点已生成的压缩适配尺寸,即便代码里传的是full参数,也会被钩子拦截改写。
要强制绕过这个拦截拿到全尺寸原图,不要直接依赖get_the_post_thumbnail_url的返回值,改用直接读取附件元数据的方式取图:调用wp_get_attachment_image_src函数传入目标文章的特色图片 ID、full参数,该函数直接读取附件存储的原文件路径,不会经过AMP插件的图片优化过滤钩子,能稳定返回全尺寸原图地址。

修正后的完整可用代码

<?php if(has_post_thumbnail()) {
    // 统一获取目标文章ID,避免变量大小写混乱
    $target_post_id = isset($next->ID) ? $next->ID : get_the_ID();
    // 直接读取附件元数据获取全尺寸缩略图,绕过AMP插件的图片尺寸过滤
    $thumbnail_id = get_post_thumbnail_id($target_post_id);
    $full_thumb_data = wp_get_attachment_image_src($thumbnail_id, 'full');
    $full_thumb_url = $full_thumb_data[0] ?? get_the_post_thumbnail_url($target_post_id, 'full');
?>
    <?php if(is_amp_endpoint()) { ?>
        <amp-img 
            class="amp-wp-enforced-sizes" 
            src="<?php echo esc_url($full_thumb_url); ?>" 
            width="372" 
            height="186" 
            alt="<?php echo esc_attr($post->post_title); ?>" 
            layout="responsive" 
        >
            <noscript>
                <img decoding="async" alt="<?php echo esc_attr($post->post_title); ?>" src="<?php echo esc_url($full_thumb_url); ?>">
            </noscript>
        </amp-img>
    <?php } else { ?>
        <?php echo get_the_post_thumbnail($target_post_id, 'full'); ?>
    <?php }
} ?>

内容的提问来源于stack exchange,提问作者Edns

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 15:15:04