使用tax_query查询自定义文章类型时附件尺寸及srcset失效,如何解决?
解决tax_query导致附件尺寸失效的问题
可能的原因
这种情况通常是tax_query修改了主查询的上下文,导致WordPress获取附件尺寸时,错误套用了当前查询的分类筛选规则,无法正确读取附件的缩略图元数据。
解决方案
方案1:用get_posts独立查询,避免干扰主查询
如果你的代码是通过修改主查询(比如pre_get_posts钩子)实现的,换成get_posts单独拉取文章,不会影响附件的加载上下文:
$knowledge_posts = get_posts(array( 'post_type' => 'knowledge', 'posts_per_page' => 99, 'tax_query' => array( array( 'taxonomy' => 'knowledge_category', 'field' => 'term_id', 'terms' => 316, ), ), )); // 循环输出内容 foreach ($knowledge_posts as $post) { setup_postdata($post); // 这里输出文章内容及附件 } wp_reset_postdata();
方案2:临时重置查询上下文再获取附件
如果必须修改主查询,在获取附件尺寸前临时清空tax_query,完成后恢复:
// 保存当前的tax_query设置 $original_tax_query = $wp_query->tax_query; // 临时重置tax_query $wp_query->tax_query = new WP_Tax_Query(); // 获取并输出指定尺寸的附件 echo wp_get_attachment_image($attachment_id, 'medium'); // 恢复原有的tax_query $wp_query->tax_query = $original_tax_query;
方案3:直接读取附件元数据生成尺寸链接
绕过WordPress的尺寸封装函数,直接从附件元数据中提取尺寸信息:
$attachment_meta = wp_get_attachment_metadata($attachment_id); if ($attachment_meta && isset($attachment_meta['sizes']['medium'])) { $medium_size = $attachment_meta['sizes']['medium']; $original_url = wp_get_attachment_url($attachment_id); $medium_url = str_replace(wp_basename($original_url), $medium_size['file'], $original_url); echo '<img src="' . esc_url($medium_url) . '" width="' . esc_attr($medium_size['width']) . '" height="' . esc_attr($medium_size['height']) . '" alt="' . esc_attr(get_post_meta($attachment_id, '_wp_attachment_image_alt', true)) . '">'; }
方案4:排查插件/主题冲突
部分主题或插件会在tax_query存在时修改附件加载逻辑。可以临时禁用所有插件、切换到默认主题(如Twenty Twenty-Four)测试,若恢复正常,再逐个排查插件和主题的代码,找到冲突的钩子函数。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

