如何获取所有文章的ACF字段值并关联文章链接生成字母序目录
实现方案
核心逻辑说明
- 首先通过WordPress原生查询批量获取所有已发布、且设置了目标ACF字段的文章
- 遍历查询结果,将关键词与对应文章的访问链接配对存入数组
- 对数组按关键词的字母顺序升序排序
- 遍历排序后的数组生成目录列表
完整实现代码
假设你创建的ACF字段的字段名是unique_article_keyword,使用前替换为你自己的实际字段名即可,代码可以插入到主题对应的模板文件中使用:
// 替换为你自己创建的ACF字段的实际字段名 $target_acf_field = 'unique_article_keyword'; $keyword_list = []; // 配置查询参数 $args = [ 'post_type' => 'post', // 若为自定义文章类型,替换为对应类型别名即可 'post_status' => 'publish', 'posts_per_page' => -1, // 获取所有符合条件的文章 'meta_key' => $target_acf_field, // 自动过滤未设置该字段的文章 'no_found_rows' => true, // 禁用分页统计,提升查询性能 ]; $keyword_query = new WP_Query($args); if ($keyword_query->have_posts()) { while ($keyword_query->have_posts()) { $keyword_query->the_post(); $current_keyword = get_field($target_acf_field); // 二次校验避免空值进入列表 if (!empty($current_keyword)) { $keyword_list[] = [ 'keyword' => $current_keyword, 'url' => get_permalink() ]; } } wp_reset_postdata(); // 重置文章数据,避免污染页面主查询 } // 按关键词字母顺序排序,不区分大小写 usort($keyword_list, function($a, $b) { return strcasecmp($a['keyword'], $b['keyword']); }); // 输出目录列表 if (!empty($keyword_list)) { echo '<ul class="keyword-directory">'; foreach ($keyword_list as $item) { echo '<li><a href="'. esc_url($item['url']) .'">'. esc_html($item['keyword']) .'</a></li>'; } echo '</ul>'; }
注意事项
- 中文关键词默认会按UTF-8编码顺序排序,如果需要按拼音排序,需要额外引入中文拼音转换类库处理
- 网站文章量超过1000篇的场景,建议给查询添加缓存,避免每次页面加载都执行全表查询影响性能
内容的提问来源于stack exchange,提问作者Rene Dasbeck
相关产品推荐
相关产品推荐

