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
相关产品推荐
相关产品推荐

