如何用PHP实现WooCommerce商品描述字数限制且不截断单词
解决方案
你可以通过两种方式实现不截断单词的摘要输出,分别是「按单词数量限制长度」和「固定最大字符数但自动截止到最后一个完整单词」,你可以按需选择:
方案1:按单词数量限制长度
直接用WordPress原生自带的wp_trim_words()函数,专门用于按单词数裁剪文本,会自动处理标点、多语言字符边界问题,修改后代码如下:
function woocommerce_after_shop_loop_item_title_short_description() { global $product; if ( ! $product->post->post_excerpt ) return; $short_desc = apply_filters( 'woocommerce_short_description', $product->post->post_excerpt ); ?> <div itemprop="description"> <?php // 第二个参数为保留的单词数量,可根据需求调整,第三个参数为末尾追加的符号 echo wp_trim_words( $short_desc, 30, '...' ); ?> </div> <?php }
说明:你可以修改第二个参数的数值(示例为30)来控制展示的单词数量,完全不会出现单词截断的问题。
方案2:固定最大字符数,自动保留完整单词
如果你还是希望控制最大字符长度接近165,只是不要切断单词,可以使用支持多字节字符的mb_strimwidth()方法,修改后代码如下:
function woocommerce_after_shop_loop_item_title_short_description() { global $product; if ( ! $product->post->post_excerpt ) return; $short_desc = apply_filters( 'woocommerce_short_description', $product->post->post_excerpt ); ?> <div itemprop="description"> <?php // 第二个参数为起始位置,第三个为最大字符数,第四个为末尾追加符号,自动跳过截断的单词 echo mb_strimwidth( $short_desc, 0, 165, '...' ); ?> </div> <?php }
说明:这个方案输出的字符数不会超过165,且不会出现单词/汉字被截断的情况,符合你原来的长度控制习惯。
内容的提问来源于stack exchange,提问作者Sophie
相关产品推荐
相关产品推荐

