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

如何调用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> ';

Single category name and icon displayed

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:36:06