wp_get_loading_optimization_attributes钩子$attr无src,设置fetchpriority失败
解决wp_get_loading_optimization_attributes钩子中$attr无src的问题
在WordPress 6.4+的图片加载优化机制下,wp_get_loading_optimization_attributes钩子的$attr参数里,img标签的src可能被暂存到data-src或其他属性中(用于懒加载优化),导致直接读取$attr['src']会失败。以下是修正后的代码,支持匹配站内/外部图片并添加fetchpriority="high":
function set_fetchpriority_high_on_specific_image( $loading_attrs, $tag_name, $attr, $context ) { if ( 'img' === $tag_name && 'the_content' === $context ) { // 匹配站内图片:通过附件ID获取URL(更可靠,不受CDN域名影响) if ( isset( $attr['data-id'] ) ) { $attachment_url = wp_get_attachment_url( $attr['data-id'] ); if ( $attachment_url === 'https://example.org/a-specific-image.jpg' ) { $loading_attrs['fetchpriority'] = 'high'; unset( $loading_attrs['loading'] ); // 移除懒加载属性,避免冲突 return $loading_attrs; } } // 匹配外部图片:检查优化后的真实图片地址属性(根据实际页面调整属性名) if ( isset( $attr['data-src'] ) && $attr['data-src'] === 'https://example.org/a-specific-image.jpg' ) { $loading_attrs['fetchpriority'] = 'high'; unset( $loading_attrs['loading'] ); return $loading_attrs; } // 其他情况移除高优先级属性 unset( $loading_attrs['fetchpriority'] ); } return $loading_attrs; } add_filter( 'wp_get_loading_optimization_attributes', 'set_fetchpriority_high_on_specific_image', 10, 4 );
关键说明:
- 站内图片优先使用
data-id关联附件ID获取URL,这种方式不会因为CDN域名变更、图片压缩后缀变化导致匹配失效 - 外部图片需要根据你的WordPress优化配置,检查对应的真实地址属性(常见的有
data-src、data-lazy-src,可通过浏览器开发者工具查看图片标签的实际属性) - 添加
fetchpriority="high"时建议移除loading懒加载属性,高优先级图片应立即加载,避免两种策略冲突
内容的提问来源于stack exchange,提问作者Ashok Kumar Panthri
相关产品推荐
相关产品推荐

