
本文详解如何修改 php 代码,使广告仅在文章第 5 段之后首次出现,并严格按“每 5 段插入一次”规则循环,避免在首段后误展示。提供可直接复用的健壮函数及关键注意事项。
本文详解如何修改 php 代码,使广告仅在文章第 5 段之后首次出现,并严格按“每 5 段插入一次”规则循环,避免在首段后误展示。提供可直接复用的健壮函数及关键注意事项。
WordPress 中常见的广告插入逻辑(如 index % 5 === 0)会导致广告在第 0 段(即第一个 <p></p> 结束后)就触发——这正是原代码中广告“从第一段后就开始”的根本原因。要实现广告首次出现在第 5 段之后,随后每 5 段重复一次(即第 5、10、15…段末尾),关键在于将判断逻辑从「索引能被整除」改为「段落序号(从 1 开始计数)能被整除」。
以下是优化后的完整解决方案,已整合进 WordPress 主题的 functions.php 或插件中:
// 插入广告:从第 5 段后开始,此后每 5 段插入一次
add_filter('the_content', 'prefix_insert_post_ads');
function prefix_insert_post_ads($content) {
$ad_code = '<div class="post-ad"><center>【您的广告代码】</center></div>';
if (is_single() && !is_admin()) {
return prefix_insert_after_paragraph($ad_code, 5, $content);
}
return $content;
}
// 核心函数:按自然段序号(1-based)插入广告
function prefix_insert_after_paragraph($insertion, $paragraph_id, $content) {
if (empty($content) || !is_string($content)) {
return $content;
}
$closing_p = '';
$paragraphs = explode($closing_p, $content);
$contentWithAds = '';
for ($i = 0; $i <p>✅ <strong>关键改进说明:</strong> </p>
- 使用
$paragraphNumber = $i + 1实现1-based 段落计数,确保5 % 5 === 0→ 第 5 段后首次插入; - 增加
trim()和空段落过滤,避免因 HTML 换行、多余空格导致段落计数错乱; - 将广告包裹在语义化
<div class="post-ad"> 中,便于 CSS 定位与样式控制; <li>添加输入校验(<code>empty()/is_string()),提升函数鲁棒性。 - 此方案依赖
<p></p>标签作为段落分隔符,若内容含<div>、<code><section></section>等块级元素或富文本编辑器自动闭合异常,建议配合wpautop()预处理(可在the_content过滤前确保已应用); - 广告代码中请勿直接使用未转义的双引号或特殊字符,推荐将广告 HTML 存入变量或通过
wp_kses_post()过滤; - 如需跳过首段 且 跳过摘要/引言区块(如
<!--more-->后内容),需额外解析get_the_content()并结合the_excerpt逻辑,本例聚焦通用段落场景。
⚠️ 注意事项:
通过以上重构,广告将精准出现在第 5、10、15…段落闭合标签











