You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用add_filter将HTML模板插入WordPress内容中部?

解决WordPress文章内容中间插入广告的问题

我来帮你搞定这个问题!你现在直接在模板里调用bbtre_the_amazon_items()只能固定在模板写死的位置(比如顶部),要把广告插入到文章内容的中间,得借助WordPress的the_content过滤器来动态处理内容,这样就能精准控制插入位置了。

核心思路

通过add_filter挂钩the_content,把文章内容拆分成片段,计算好中间位置后插入广告内容,最后重新组合成完整的文章内容。

具体代码实现

把这段代码放到你的主题functions.php文件里,或者自定义插件中:

function insert_amazon_ads_in_middle( $content ) {
    // 仅在前台单篇文章页面生效,避免后台或列表页显示广告
    if ( ! is_single() || is_admin() ) {
        return $content;
    }

    // 捕获广告函数的输出(如果你的函数是直接echo内容,必须用这个方式)
    ob_start();
    bbtre_the_amazon_items();
    $ad_content = ob_get_clean();

    // 如果广告内容为空,直接返回原文章内容
    if ( empty( $ad_content ) ) {
        return $content;
    }

    // 按段落标签拆分文章内容,适配大多数WordPress文章的结构
    $content_parts = explode( '</p>', $content );
    $total_paragraphs = count( $content_parts );

    // 计算插入位置:比如插入到文章中间段落之后
    $insert_at = floor( $total_paragraphs / 2 );
    // 确保位置至少在第1段之后,避免内容过短时出错
    $insert_at = max( 1, $insert_at );

    // 把广告插入到指定位置,注意补回拆分时去掉的</p>标签
    array_splice( $content_parts, $insert_at, 0, $ad_content . '</p>' );

    // 重新组合成完整的文章内容并返回
    return implode( '</p>', $content_parts );
}
// 挂钩到the_content过滤器,优先级设为10(默认值,可根据需要调整)
add_filter( 'the_content', 'insert_amazon_ads_in_middle', 10 );

关键细节说明

  1. 捕获广告输出:如果bbtre_the_amazon_items()是直接echo广告代码而不是返回字符串,必须用ob_start()和ob_get_clean()来捕获输出内容,否则广告会直接在文章内容之前显示,达不到插入中间的效果。
  2. 调整插入位置:你可以修改$insert_at的值来控制插入位置,比如改成固定的3,就是在第3段之后插入;或者根据字数判断,比如当文章内容超过500字时再插入。
  3. 适配内容结构:如果你的文章不是用<p>标签分段(比如用<div>或其他标签),需要修改explode()的参数,换成你文章里的分段标记。

注意事项

  • 不要直接修改主题的核心文件,建议用子主题的functions.php或者自定义插件来添加代码,这样主题更新时不会丢失修改。
  • 测试时记得清空WordPress缓存,确保新代码生效。

内容的提问来源于stack exchange,提问作者Kimsea Sok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:56:16