使用 Ad Inserter 实现多语言、多系列文章的精准 CTA 插入
在运营一个中英文双语的技术博客时,我遇到了一个不算复杂但有点繁琐的需求:
- 在普通文章(非 VPN 系列)的末尾,根据文章语言,分别显示中文版或英文版的通用联系方式 CTA。
- 而在 VPN 系列文章(包括中英文)中,不显示通用 CTA,而是显示专属的“WireGuard VPN 代搭建服务”广告(Block 1 和 Block 2)。
- 未来可能还会新增其他系列或语言,希望配置能尽量清晰、易于扩展。
经过一番折腾,最终通过 Ad Inserter 免费版 的黑名单功能,配合 Polylang 的语言代码,完美实现了需求。下面是完整的配置思路和步骤,供有类似需求的朋友参考。
一、整体逻辑
我的文章按系列分为两类:
- VPN 系列:中英文两个系列,分别使用自定义分类法
series: self-hosted-vpn(中文)和series: self-hosted-vpn-en(英文)。这些文章需要显示专属的 VPN 代搭建 CTA(Block 1 和 Block 2)。 - 普通文章:不属于上述系列。这些文章需要根据当前语言显示对应的通用 CTA。
为了实现“普通文章显示通用 CTA,VPN 文章不显示通用 CTA”,最直接的办法是在通用 CTA 的 Block 中,黑名单里排除 VPN 系列的所有文章。
同时,由于有两种语言,我需要两个通用 CTA Block:
- Block 3:中文通用 CTA(只显示在普通中文文章中)
- Block 4:英文通用 CTA(只显示在普通英文文章中)
二、关键点:如何区分语言?
我的博客使用 Polylang 插件管理多语言。Polylang 会在每个文章页面添加一个语言相关的 class,并且可以通过 wpml-current-language 这个参数来识别当前语言(兼容 WPML 的写法)。
在 Ad Inserter 的“黑白名单”中,我们可以直接使用这个参数:
- 中文页面:
wpml-current-language: zh - 英文页面:
wpml-current-language: en
三、精简后的具体配置步骤
原理:
wpml-current-language: en已经排除了所有英文文章(包括英文 VPN 系列),因此无需再单独排除series: self-hosted-vpn-en。同理,wpml-current-language: zh排除了所有中文文章,也就不再需要排除series: self-hosted-vpn。两个通用 Block 的黑名单只需各两个条件,简洁且无冗余。
1. 准备两个通用 CTA Block
Block 3 – 中文通用 CTA

核心设置:
- 插入位置:
After post - 黑名单(Blacklist):
wpml-current-language: en→ 排除所有英文文章series: self-hosted-vpn→ 排除中文 VPN 系列
这样,Block 3 只会在语言为中文、且不属于中文 VPN 系列的文章中显示。
Block 4 – 英文通用 CTA

核心设置:
- 插入位置:
After post - 黑名单:
wpml-current-language: zh→ 排除所有中文文章series: self-hosted-vpn-en→ 排除英文 VPN 系列
同理,Block 4 只会在语言为英文、且不属于英文 VPN 系列的文章中显示。
2. VPN 系列专属 Block(Block 1 和 Block 2)保持不变
- Block 1:白名单
series: self-hosted-vpn,插入位置After post。 - Block 2:白名单
series: self-hosted-vpn-en,插入位置After post。
这两个 Block 没有设置黑名单,因此只要满足系列条件就会显示。而由于通用 Block 已经通过黑名单排除了这些系列,所以不会出现重复插入。
四、效果验证
配置完成后,我们来看实际页面效果。
1. VPN 系列文章(应显示专属 CTA,不显示通用 CTA)
- 中文 VPN 文章:
可以看到文章末尾出现了“拒绝折腾 | 专属 WireGuard VPN 代搭建服务”,没有通用联系方式。 - 英文 VPN 文章:
显示英文版专属 CTA(“Stop the Hassle | Custom WireGuard VPN Setup Service”),通用 CTA 未出现。


2. 普通文章(应显示对应语言的通用 CTA)
- 普通中文文章:
末尾正确显示中文通用联系方式(包含服务列表、微信、邮箱等)。 - 普通英文文章:
末尾正确显示英文通用联系方式。


五、扩展性与维护提示
这套方案的设计原则是:黑名单只用于通用 CTA 的 Block,专属系列只需要在自己的 Block 里使用白名单。
- 新增专属系列时:
创建一个新的专属 Block,设置白名单为该系列(例如series: docker-tutorial),插入位置与通用 Block 相同。
同时,需要将该系列添加到每一个通用 CTA Block(Block 3、Block 4 以及未来新增的其他语言通用 Block)的黑名单中。 - 如果新系列属于中文语言,则只需添加到中文通用 Block(Block 3)的黑名单;
- 如果中英文语言都有,则两个通用 Block 都要添加。
这个操作只需在通用 Block 的黑名单文本框中追加一个系列名(例如, series: docker-tutorial),几秒钟即可完成。 - 新增语言时:
新建一个对应语言的通用 Block,其黑名单中需排除所有其他语言(例如wpml-current-language: zh, en)以及所有专属系列。
同时,所有已有的通用 Block 也需要将新语言条件加入黑名单(例如在 Block 3 的黑名单中增加wpml-current-language: ja)。
虽然不能做到“一次配置,永远不管”,但所有维护工作都在黑白名单的一个文本框内完成,逻辑清晰,成本很低。
六、总结
通过 Ad Inserter 免费版的黑名单功能,结合 Polylang 的语言参数,我们可以轻松实现:
✅ 不同语言显示不同的 CTA
✅ 特定系列文章自动替换为专属 CTA
✅ 完全避免多个 Block 同时插入的冗余问题
✅ 配置简洁(每个通用 Block 仅需两个黑名单条件起步,后续按需追加)
如果你也在运营多语言 WordPress 站点,并且需要精细化控制每篇文章末尾的广告或服务信息,希望这篇记录对你有用。
附:文中使用的 Ad Inserter 版本为最新免费版(2.7.x),Polylang 版本 3.5+。黑白名单的语法为
分类法:值,多个条件用英文逗号分隔。
有任何疑问或更好的方案,欢迎留言讨论。