WordPress商品标题截断优化:如何改进循环耗时问题?
WordPress商品标题截断优化
需求背景
- 商品标题长度为1-10个单词,需限制在两行展示(实测对应90-100字符宽度)
- 要求不拆分单词,超长时自动截断并添加省略号
- WordPress内置
wp_trim_words()可实现不拆词截断,但因单词长度差异,有时存在剩余空间却无法容纳更多单词的情况 - 原代码通过循环调用
wp_trim_words()计算字符长度,效率偏低
优化思路
直接拆分标题为单词数组,逐个累加单词的字符长度(含空格),直到总长度接近设定的阈值(预留省略号空间),再拼接单词并添加省略号,避免循环调用wp_trim_words()带来的重复计算开销。
优化代码示例
$title = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. In laborum quod aperiam veritatis dolore ipsa odit ducimus nulla!'; $max_chars = 95; // 可根据实际两行字符上限调整(建议90-100之间) $ellipsis = '...'; $ellipsis_length = strlen($ellipsis); // 先统一处理连续空格,再拆分单词 $clean_title = preg_replace('/\s+/', ' ', $title); $words = explode(' ', $clean_title); $trimmed_words = []; $current_length = 0; foreach ($words as $word) { // 计算当前单词加入后的总长度(含后续空格) $word_total_length = strlen($word) + 1; // 预留省略号空间,判断是否能加入当前单词 if ($current_length + $word_total_length + $ellipsis_length <= $max_chars) { $trimmed_words[] = $word; $current_length += $word_total_length; } else { break; } } // 生成最终标题 if (count($trimmed_words) < count($words)) { $title = implode(' ', $trimmed_words) . $ellipsis; } else { $title = $clean_title; }
额外说明
- 若标题不存在连续空格,可去掉
preg_replace步骤进一步提升效率 - 阈值
$max_chars可根据实际UI展示的字符上限微调,确保刚好适配两行空间
内容的提问来源于stack exchange,提问作者Anton
相关产品推荐
相关产品推荐

