如何用PHP生成WP分类ID-名称扁平映射,供WordPress插件JS使用
解决WordPress分类ID-名称映射的扁平格式问题
我来帮你搞定这个问题!你当前的代码之所以会生成嵌套结构,是因为array_map的每个回调都返回了一个仅包含单个键值对的对象,最终这些对象被包裹在一个带索引的数组里,转成JSON后就出现了外层的0、1这类键。要得到你想要的扁平键值对映射,我们可以换两种更直接的方式实现:
方法1:使用foreach循环(直观易懂)
先过滤掉不需要的分类,再通过循环直接构建关联数组:
// 先过滤排除ID为21和1的分类 $filtered_categories = array_filter($categories, function ($cat) { return $cat->term_id !== 21 && $cat->term_id !== 1; }, ARRAY_FILTER_USE_BOTH); // 构建扁平的ID-名称映射数组 $all_categories = []; foreach ($filtered_categories as $cat) { $all_categories[$cat->term_id] = $cat->cat_name; }
方法2:使用array_reduce(函数式风格)
如果更喜欢函数式写法,可以用array_reduce一步完成过滤和映射:
$all_categories = array_reduce( // 过滤掉指定ID的分类 array_filter($categories, function ($cat) { return $cat->term_id !== 21 && $cat->term_id !== 1; }, ARRAY_FILTER_USE_BOTH), // 累加构建关联数组 function ($carry, $cat) { $carry[$cat->term_id] = $cat->cat_name; return $carry; }, [] // 初始值:空数组 );
效果说明
这两种方法得到的$all_categories都是扁平的关联数组,当你把它转成JSON输出给JavaScript时,就会生成你期望的格式:
"all_categories": { "15": "Case Studies", "17": "Events", ... }
对比你之前的代码,核心区别在于我们直接把分类ID作为数组的键,分类名称作为对应的值,而不是每次生成一个小对象,这样就避免了嵌套结构的出现。
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

