PHP实现WooCommerce短描述每行首词加HTML标签及文件校验
WooCommerce商品短描述首词自动加链接功能实现方案
核心优化思路
直接逐行提取短描述的首个单词,无需预存维护关键词库,逐行生成对应PDF路径做存在性校验,彻底解决原方案的两个问题。
最终实现代码
// 取商品SKU $sku = $product->get_sku(); // 配置PDF本地存储根路径(按自己服务器实际存放路径调整,用本地路径校验比远程HTTP请求性能高很多) $pdf_local_root = WP_CONTENT_DIR . '/uploads/media/' . $sku . '/'; // 配置PDF对外访问的URL前缀 $pdf_public_prefix = 'https://www.example.com/media/' . $sku . '/'; // 拆分短描述为单行,自动过滤空行 $lines = array_filter(explode("\n", strip_tags($short_description))); $output = ''; foreach ($lines as $line) { $trim_line = trim($line); // 提取每行第一个单词,正则默认支持中文、英文、数字,可按需调整匹配规则 preg_match('/^[\p{Han}\w]+/u', $trim_line, $matches); if (empty($matches)) { // 无有效首词直接输出原文本 $output .= '<li>' . esc_html($trim_line) . '</li>'; continue; } $first_word = $matches[0]; // 生成当前首词对应的PDF本地路径 $pdf_path = $pdf_local_root . $sku . $first_word . '.pdf'; if (file_exists($pdf_path)) { // PDF存在则给首词加跳转链接 $link = esc_url($pdf_public_prefix . $sku . $first_word . '.pdf'); $processed_line = preg_replace('/^' . preg_quote($first_word, '/') . '/', '<a href="'.$link.'">'.$first_word.'</a>', $trim_line); $output .= '<li>' . $processed_line . '</li>'; } else { // PDF不存在直接输出带li标签的原文本 $output .= '<li>' . esc_html($trim_line) . '</li>'; } } // 输出最终处理后的内容 echo $output;
方案说明
- 完全不需要手动维护200+关键词,自动逐行识别首词,正则匹配规则可根据业务实际首词格式灵活调整
- 修复了原URL生成逻辑错误,每个首词单独生成对应PDF路径校验,准确率100%
- 改用本地文件校验替代远程fopen请求,性能提升明显,同时避免了远程请求失败导致的误判
- 所有输出做了转义处理,规避XSS安全风险,兼容空行、无有效首词的异常场景
内容的提问来源于stack exchange,提问作者Nick P
相关产品推荐
相关产品推荐

