如何用PHP为WordPress中H2标签间的随机句子添加加粗格式
实现WordPress中H2标签间随机/固定句子自动加粗
可以通过WordPress的the_content过滤器结合PHP正则实现需求,以下是两种方案:
一、随机句子加粗实现
将以下代码添加到主题的functions.php文件或自定义插件中:
add_filter('the_content', 'bold_random_sentence_between_h2'); function bold_random_sentence_between_h2($content) { // 按H2标签分割内容,保留H2标签本身 $blocks = preg_split('/(<h2[^>]*>.*?<\/h2>)/i', $content, -1, PREG_SPLIT_DELIM_CAPTURE); foreach ($blocks as &$block) { // 跳过H2标签,只处理正文内容部分 if (!preg_match('/<h2[^>]*>.*?<\/h2>/i', $block)) { // 提取所有以.或?结尾的句子(支持跨行匹配) preg_match_all('/\s*([^.?!]+[.?!])\s*/s', $block, $matches); $sentences = $matches[1]; if (!empty($sentences)) { // 随机挑选一个句子 $random_index = array_rand($sentences); $target_sentence = $sentences[$random_index]; // 替换为加粗格式,处理首尾空格 $block = str_replace($target_sentence, '<b>' . trim($target_sentence) . '</b>', $block); } } } return implode('', $blocks); }
代码说明:
- 利用
the_content过滤器拦截文章输出内容,这是WordPress处理内容的标准方式 - 按H2标签分割内容,确保每个H2对应的正文区块单独处理
- 用正则提取区块内所有符合规则的句子(匹配到
.或?结尾的完整语句) - 随机选中一个句子,替换为
<b>包裹的加粗格式 - 拼接所有区块返回处理后的内容
二、固定位置句子加粗实现(简化方案)
如果随机逻辑不符合需求,可改为固定加粗第1/2/3句,示例代码如下:
add_filter('the_content', 'bold_fixed_sentence_between_h2'); function bold_fixed_sentence_between_h2($content) { $blocks = preg_split('/(<h2[^>]*>.*?<\/h2>)/i', $content, -1, PREG_SPLIT_DELIM_CAPTURE); foreach ($blocks as &$block) { if (!preg_match('/<h2[^>]*>.*?<\/h2>/i', $block)) { preg_match_all('/\s*([^.?!]+[.?!])\s*/s', $block, $matches); $sentences = $matches[1]; if (!empty($sentences)) { // 固定选第1句(索引0),选第2句用1,第3句用2 $target_index = 0; if (isset($sentences[$target_index])) { $target_sentence = $sentences[$target_index]; $block = str_replace($target_sentence, '<b>' . trim($target_sentence) . '</b>', $block); } } } } return implode('', $blocks); }
注意事项:
- 若内容包含特殊字符(如
$、*),可将str_replace替换为preg_replace避免匹配错误:$block = preg_replace('/\Q' . preg_quote($target_sentence, '/') . '\E/', '<b>' . trim($target_sentence) . '</b>', $block, 1); - 可根据实际内容调整正则规则,比如需要匹配感叹号结尾的句子,将正则改为
/([^.?!]+[.?!])/s即可
内容的提问来源于stack exchange,提问作者Yerain
相关产品推荐
相关产品推荐

