自定义产品分类法terms循环调用ACF图片字段src为空问题咨询
问题修复方案
代码存在的核心错误
- 循环分类法term时,错误调用
get_queried_object()获取当前页面的term ID,而非循环中每个$term自身的ID,导致ACF字段取值对象完全错误 - 输出图片URL时未加
echo语句,PHP不会自动输出变量值,直接导致src属性为空 - 短代码回调函数要求返回输出内容而非直接打印,同时代码中
$product_id未定义,需要先获取当前产品对象 - 未做空值判断,当分类项未设置图片时会输出空的src属性,不符合HTML规范
修复后完整代码
function minerals() { // 先获取当前产品ID global $product; if (!$product) return ''; $product_id = $product->get_id(); $terms = get_the_terms($product_id, 'minerals'); if (empty($terms) || is_wp_error($terms)) return ''; $output = ''; foreach ($terms as $term) { $product_term = esc_html($term->name); $term_slug = esc_attr($term->slug); // 直接拿当前循环的term ID取ACF字段 $term_image = get_field('mineral_image', $term); $term_link = esc_url(home_url('/minerals/' . $term_slug)); // 拼接输出内容 $output .= '<div>'; // 只有图片存在时才输出img标签 if ($term_image) { $output .= '<img src="' . esc_url($term_image) . '" alt="' . $product_term . '">'; } $output .= '<a href="' . $term_link . '">' . $product_term . '</a>'; $output .= '</div>'; } return $output; } // 注册短代码 add_shortcode('short-minerals', 'minerals');
验证步骤
- 确认ACF字段
mineral_image的返回格式设置为URL - 确认每个
minerals分类项的后台都已上传对应的图片 - 短代码调用为
[short-minerals],注意短代码名称和注册时保持一致
内容的提问来源于stack exchange,提问作者Jure Zadravec
相关产品推荐
相关产品推荐

