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

如何在WooCommerce产品分类归档页显示ACF图片字段?

解决方法

你的代码无法生效主要有两个原因:

  1. 未指定字段所属的分类术语上下文,ACF 默认会读取文章元数据而非分类术语的字段
  2. 图片字段的返回值类型需要正确处理(ACF 图片字段可返回 ID、URL 或数组)

以下是修正后的代码:

add_action( 'woocommerce_after_main_content', 'wc_add_category_lower_image', 100 );
function wc_add_category_lower_image() { 
    // 仅在产品分类归档页面执行
    if ( ! is_product_category() ) {
        return;
    }

    // 获取当前产品分类的术语对象
    $current_category = get_queried_object();

    // 获取 ACF 图片字段值(传入分类术语对象指定上下文)
    $lower_image = get_field( 'lower', $current_category );

    // 若字段有值则显示图片
    if ( $lower_image ) {
        // 处理 ACF 返回图片数组的情况
        if ( is_array( $lower_image ) ) {
            echo '<img src="' . esc_url( $lower_image['url'] ) . '" alt="' . esc_attr( $lower_image['alt'] ) . '" />';
        } 
        // 处理返回附件 ID 的情况
        elseif ( is_numeric( $lower_image ) ) {
            echo wp_get_attachment_image( $lower_image, 'full' ); // 可替换 'full' 为所需尺寸(如 'medium')
        } 
        // 处理直接返回图片 URL 的情况
        elseif ( is_string( $lower_image ) ) {
            echo '<img src="' . esc_url( $lower_image ) . '" alt="" />';
        }
    }
}

关键说明:

  • 上下文指定:通过 get_field('lower', $current_category) 告诉 ACF 我们要读取当前产品分类术语的字段,而非当前文章的字段
  • 页面判断:is_product_category() 确保代码仅在产品分类页面运行,避免不必要的执行
  • 图片格式兼容:针对 ACF 图片字段的三种返回类型(数组、ID、URL)分别处理,确保图片正确显示
  • 安全处理:使用 esc_url() 和 esc_attr() 对输出内容进行转义,避免 XSS 安全问题

另外,请确认你的 ACF 字段设置正确:

  • 在字段组的「位置」规则中,需设置为「分类术语」等于「产品分类」
  • 根据你的需求选择合适的图片返回类型(推荐使用「图片数组」或「附件 ID」,便于灵活控制图片尺寸和 alt 属性)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:32:44