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

WordPress分类短代码创建问题:get_categories返回空数组求助

解决WordPress分类短代码返回空内容的问题

咱们一步步排查问题,把你的短代码修复好:

1. 先确认分类ID和子分类存在

首先要核实两点:

  • ID为62的分类确实存在:你可以在WordPress后台「文章 → 分类」里编辑该分类,查看地址栏里的tag_ID=62来确认ID没写错。
  • 这个分类有可见的子分类:子分类不能是私密/密码保护状态;如果子分类里没有文章,默认get_categories会忽略它们,后面我们会调整参数解决这个问题。

2. 升级get_categories的参数写法

WordPress现在更推荐用数组传递参数,旧的字符串写法可能有兼容性问题。把原来的调用改成:

$categories = get_categories( array(
    'child_of' => 62,
    'hide_empty' => false, // 加上这个就能显示没有文章的空分类
) );

默认情况下get_categories只会返回有文章的分类,如果你需要包含空分类,一定要加'hide_empty' => false。

3. 修复输出逻辑的错误

你的代码里只输出了<option>的开头标签,既没显示分类名称,也没闭合标签——就算拿到了分类数据,前端也看不到内容。把循环部分改成:

foreach ($categories as $category) {
    // 用esc_attr和esc_html做安全转义,避免XSS风险
    $output .= '<option value="'. esc_attr($category->cat_name) .'">'. esc_html($category->name) .'</option>';
}

这里的安全转义是WordPress开发的最佳实践,一定要记得加。

4. 完整的修复后代码

整合所有调整后的完整代码如下:

function second_option() {
    // 获取ID为62的分类的所有子分类,包含空分类
    $categories = get_categories( array(
        'child_of' => 62,
        'hide_empty' => false,
    ) );
    
    $output = '';
    
    // 有分类才生成选项,没有的话显示提示
    if ( ! empty($categories) ) {
        foreach ($categories as $category) {
            $output .= '<option value="'. esc_attr($category->cat_name) .'">'. esc_html($category->name) .'</option>';
        }
    } else {
        $output .= '<option value="">暂无子分类</option>';
    }
    
    return $output;
}
add_shortcode("option_2", "second_option");

5. 额外排查点

  • 确保代码是加在**当前激活主题的functions.php**里,或者用自定义插件添加(更推荐,主题切换时不会丢失)。
  • 检查有没有语法错误:比如少写分号、括号不匹配,这些都会导致代码不执行。
  • 确认分类权限:如果子分类设为私密,前端用户是看不到的,要改成公开状态。

内容的提问来源于stack exchange,提问作者rob.m

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:37:02