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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 22:49:58