如何调用ACF分类taxonomy字段 输出带Font Awesome图标的全分类列表
问题根源
你的代码存在两个核心逻辑错误,才会只输出单个分类:
get_the_category()是用于获取当前文章关联的分类,不是获取全站全部分类,当你当前文章仅归属1个分类时自然只返回1条数据- 循环内部重复调用
get_the_terms(get_the_ID(), 'category')后执行array_pop(),相当于每次循环都强制读取当前文章第一个分类的图标,和外层循环的分类完全不匹配
正确实现代码
要获取全站所有分类(含无文章的空分类),改用get_categories(),配置hide_empty => false参数即可,ACF获取分类字段时直接传入分类对象/分类ID即可,无需额外查询:
<?php // 获取全部分类,hide_empty设为false表示保留无文章的分类 $categories = get_categories([ 'hide_empty' => false, 'taxonomy' => 'category' ]); $separator = ' '; $output = ''; foreach ($categories as $category) { // 直接用当前循环的分类对象获取ACF字段 $icon = get_field('cat_icon', $category); // 拼接输出内容:图标 + 分类名称跳转链接 $output .= '<a href="'. esc_url(get_category_link($category->term_id)) .'" alt="'. esc_attr(sprintf(__('查看%s下的所有文章', 'textdomain'), $category->name)) .'">'; // 存在图标则输出 if ($icon) { $output .= $icon . ' '; } $output .= esc_html($category->name) .'</a>'. $separator; } echo trim($output, $separator); ?>
补充说明
如果你在ACF字段中存储的不是完整的Font Awesome标签(比如仅存储了fa-solid fa-book这类类名),可以把图标输出部分改成如下格式:
$output .= '<i class="'. esc_attr($icon) .'"></i> ';

内容的提问来源于stack exchange,提问作者zolaDesigner
相关产品推荐
相关产品推荐

