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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:15:08