为什么我在Blogger文章内使用的Conditional Tags条件标签无法生效?
问题排查与解决方案
核心故障原因
两个内容同时显示的核心诱因有两点:
- Blogger的
<b:if>类条件标签属于服务端模板语法,仅能在主题模板文件中生效。如果直接粘贴到文章编辑器的HTML编辑框内,编辑器会自动过滤所有<b:>开头的模板标签,最终只保留两个内容div,导致两段内容同时展示。 - 即使代码放在主题模板中,原有写法也存在逻辑缺陷:
data:blog.url默认返回页面的标准canonical地址,不包含?hl=hi这类查询参数,URL匹配永远失败;且手动拼接URL容易出现斜杠不匹配的问题,比如data:blog.canonicalHomepageUrl末尾自带斜杠,拼接后容易出现//错误。
解决方案
根据使用场景可选择两种实现方式:
场景1:仅需在单篇文章内实现多语言切换
直接使用客户端JavaScript实现即可,无需修改主题模板,将以下代码直接粘贴到文章HTML编辑器的对应位置:
<!-- 印地语内容 --> <div id="hi-content" style="display:none;"> अंकित </div> <!-- 英文内容 --> <div id="en-content" style="display:none;"> ankit true </div> <script> // 读取URL中的hl参数 const queryParams = new URLSearchParams(window.location.search); const currentLang = queryParams.get('hl'); // 根据参数显示对应内容 if (currentLang === 'hi') { document.getElementById('hi-content').style.display = 'block'; } else { document.getElementById('en-content').style.display = 'block'; } </script>
场景2:全站多路径适配多语言,使用服务端模板实现
将代码放到Blogger主题的模板文件中即可生效,操作步骤:
- 进入Blogger后台,依次点击「主题」-「编辑HTML」
- 找到文章内容渲染的对应位置,替换原有判断逻辑为以下代码:
<b:if cond='data:view.url.path == "/p/post.html"'> <!-- 判断hl参数是否为印地语 --> <b:if cond='data:view.queryParams.hl == "hi"'> <div>अंकित</div> <b:else/> <div>ankit true</div> </b:if> </b:if>
该写法直接调用Blogger提供的queryParams对象读取URL参数,无需手动拼接完整URL,匹配准确率更高。
内容的提问来源于stack exchange,提问作者Dark Army
相关产品推荐
相关产品推荐

