
本文讲解如何修复 PHP 中因过早 return 导致仅输出首行的问题,通过累积拼接方式完整渲染 提交的多行内容,并确保每行经 wptexturize() 处理后统一返回。
本文讲解如何修复 php 中因过早 `return` 导致仅输出首行的问题,通过累积拼接方式完整渲染 `
在 WordPress 插件或主题开发中,常需将用户通过 <textarea></textarea> 提交的多行文本(如名言列表)以短代码形式展示。原始代码存在一个典型逻辑错误:foreach 循环内直接使用 return wptexturize($rQts),导致函数在处理第一行后立即退出,后续行被完全忽略。
正确做法是在循环外初始化空字符串变量,在循环内逐行追加处理后的结果,最后统一返回。以下是修正后的完整函数:
/* Returns texturized all quotes as a single concatenated string */
function cuqts_get_allqts() {
$quote = ''; // 初始化空字符串用于累积结果
$raw_quotes = explode("\n", get_option('cuqts_quotes')); // 按换行符分割为数组
// 安全检查:空选项或无效数组则返回 null
if (empty($raw_quotes) || !is_array($raw_quotes)) {
return null;
}
foreach ($raw_quotes as $line) {
// 过滤空行(可选增强健壮性)
if (trim($line) !== '') {
$quote .= wptexturize(trim($line)) . '<br>'; // 每行后添加 <br> 保持视觉换行
}
}
return $quote;
}
// 注册短代码 [cuallqts]
add_shortcode('cuallqts', 'cuqts_get_allqts');
⚠️ 关键注意事项:
-
避免循环内
return:这是本例的核心错误,务必确保return语句位于循环之后; -
处理空行与空白字符:使用
trim()防止因空行或首尾空格导致冗余<br>或格式错乱; -
保留换行语义:
<br>标签确保 HTML 渲染时仍按行显示(若需更语义化结构,可用<p></p>或<li>包裹); -
安全性补充:生产环境建议对
get_option()返回值做esc_html()或wp_kses_post()过滤,防止 XSS(尤其当内容来源不可信时); - 性能提示:对于超长文本(如千行以上),考虑分页或前端 JavaScript 渲染,避免 PHP 内存压力。
最终,在文章或页面中插入 [cuallqts],即可完整、安全、格式化地呈现文本域中的所有行。











