如何用PHP add_action函数在WordPress视频(embed/iframe等)中显示横幅广告?
在WordPress的视频相关元素旁添加横幅广告的方案
嘿,我懂你想在embed、iframe、object、video这些视频元素附近加横幅广告的需求~不过得先明确一点:这些是HTML元素,不是WordPress的动作钩子(action hook),所以没办法直接用add_action()把函数绑定到它们身上哦。不过我们可以用「输出缓冲+内容过滤」的方式来实现这个效果,下面是具体的方案:
核心思路
我们通过WordPress的钩子启动输出缓冲,捕获页面的全部HTML内容,然后用正则表达式匹配到目标元素,在它们的前后插入广告代码,最后输出修改后的内容。
完整代码示例
// 启动输出缓冲,绑定内容过滤函数 add_action('template_redirect', 'init_video_ad_buffer'); function init_video_ad_buffer() { // 仅在前台页面启用,避免影响后台 if (!is_admin()) { ob_start('insert_banner_ads_around_video_elements'); } } // 过滤页面内容,插入广告 function insert_banner_ads_around_video_elements($page_content) { // 替换成你实际的横幅广告代码 $banner_ad_html = '<div class="video-banner-ad" style="margin: 20px 0; padding: 15px; background-color: #f8f9fa; border-radius: 4px; text-align: center;"> <!-- 这里放你的广告代码,比如谷歌广告联盟代码或者自定义广告 --> <p>📺 这是视频横幅广告</p> </div>'; // 正则匹配embed/iframe/object/video元素(支持多行标签) // 正则说明: // - <(embed|iframe|object|video)[^>]*> 匹配标签开头,包含所有属性 // - .*? 非贪婪匹配标签内容 // - <\/\2> 匹配对应的闭合标签(\2对应前面捕获的标签名) // - is 修饰符:i不区分大小写,s让.匹配换行符 $target_elements_pattern = '/(<(embed|iframe|object|video)[^>]*>.*?<\/\2>)/is'; // 在每个匹配到的元素**前面**插入广告,若要在后面加,改成 '$1' . $banner_ad_html 即可 $modified_content = preg_replace($target_elements_pattern, $banner_ad_html . '$1', $page_content); return $modified_content; }
关键细节说明
- 输出缓冲的时机:用
template_redirect钩子启动缓冲,确保能捕获到所有前台页面的输出内容,同时加了!is_admin()判断,避免影响后台管理界面。 - 正则表达式调整:如果你的页面里有自闭合的
embed或iframe(比如<iframe src="..." />),可以把正则改成/(<(embed|iframe|object|video)[^>]*\/?>)/is来匹配这种情况。 - 广告样式控制:给广告容器加了
video-banner-ad类,你可以在主题的CSS文件里自定义样式,比如调整间距、背景色等。 - 缓存注意事项:如果你的网站用了缓存插件(比如WP Rocket、W3 Total Cache),修改代码后记得清空缓存,才能看到广告效果。
可选优化
如果你只想在特定页面(比如文章页)添加广告,可以在init_video_ad_buffer函数里再加一层判断,比如:
if (!is_admin() && is_single()) { ob_start('insert_banner_ads_around_video_elements'); }
内容的提问来源于stack exchange,提问作者user9712531
相关产品推荐
相关产品推荐

