如何为WordPress自定义短代码添加else判断,无帖子时输出提示内容
WordPress短代码空结果判断逻辑修改方案
核心修改思路
原有短代码逻辑的漏洞是直接对get_posts的返回结果做循环输出,没有处理空返回值的边界情况。修改时只需要在拿到查询结果后、启动循环输出前,增加空值判断分支:无匹配结果时直接返回提示内容,有结果时再走原有的列表输出逻辑。
修改后完整代码示例
// 注册短代码钩子,对应短代码标签 [jobs_posts] add_shortcode('jobs_posts', 'jobs_posts_shortcode'); function jobs_posts_shortcode($atts) { // 原有短代码参数解析逻辑保持原样,无需改动 $params = shortcode_atts([ 'job_category' => '', 'list_num' => 5 ], $atts); // 原有get_posts查询逻辑保持原样,无需改动 $query_result = get_posts([ 'post_type' => 'post', 'category_name' => $params['job_category'], 'posts_per_page' => $params['list_num'], 'no_found_rows' => true ]); // 新增:空结果判断分支(对应需求要求的else逻辑) if (empty($query_result)) { return '<p class="empty-tip">当前暂无帖子</p>'; } // 以下为原有的循环输出列表逻辑,无需修改 $html = '<ul class="job-post-list">'; foreach ($query_result as $post_item) { $html .= sprintf( '<li> <a href="%1$s">%2$s</a> <time>%3$s</time> </li>', get_permalink($post_item->ID), get_the_title($post_item->ID), get_the_date('Y-m-d', $post_item->ID) ); } $html .= '</ul>'; return $html; }
关键注意事项
- 不需要刻意嵌套
else块实现分支:当空结果分支直接return后,后续的列表代码只会在有查询结果时执行,既达到了else的分支效果,又避免原有循环代码被嵌套造成缩进层级过深、可读性下降 - 严禁在分支内用
echo直接输出提示语:WordPress短代码的所有输出内容必须通过函数返回值传递,直接echo会导致内容打乱页面正常渲染顺序,甚至触发WordPress的REST接口返回值异常 - 判断兼容性:
get_posts无匹配结果时会返回空数组,用empty()做判断比count()判断效率更高,也不会触发未定义变量的PHP警告 - 样式自定义:可以给提示文本加独立的CSS类,后续可灵活调整提示的字号、颜色、间距,和列表页面的整体风格保持统一
内容的提问来源于stack exchange,提问作者RSS
相关产品推荐
相关产品推荐

