编写WordPress短代码生成自定义大小写空格分隔Slug失败,求排查
问题分析与修复方案
你的代码存在几个关键错误,导致无法正常运行:
- 未处理无效返回值:
get_the_terms()可能返回false(无匹配分类)或WP错误对象,直接访问$terms[1]->slug会触发致命错误,必须先验证返回值有效性。 - 对象数组误用为字符串:
$terms是WP_Term对象数组,你直接将其传入explode(),但该函数仅接受字符串参数——这里应该像原代码一样,先取出目标term的slug字符串。 - 返回值类型错误:短代码要求返回字符串,你最后返回的是数组
$array,而非拼接好的$string。
修复后的代码如下:
add_shortcode( 'MARKE', 'marke_shortcode' ); function marke_shortcode() { // 获取当前文章的marken分类项 $terms = get_the_terms( get_the_ID(), 'marken'); // 验证返回值,避免报错 if ( ! $terms || is_wp_error( $terms ) || count($terms) < 2 ) { return ''; // 无对应分类时返回空字符串 } // 取出目标slug字符串 $slug = $terms[1]->slug; // 按空格分割并处理大小写 $array = explode(' ', $slug); foreach($array as $k => $v) { if(strlen($v) <= 3) { $array[$k] = strtoupper($v); } else { $array[$k] = ucfirst($v); } } // 拼接成字符串并返回 $string = implode(' ', $array); return $string; }
补充说明:
- 新增的有效性检查,避免了因无分类或系统错误导致的页面崩溃。
- 保留原代码中取第二个term的slug的逻辑,确保功能匹配你的初始需求。
- 最终返回处理后的字符串,符合WordPress短代码的返回规范。
内容的提问来源于stack exchange,提问作者moinmobility
相关产品推荐
相关产品推荐

