如何在Blogger文章中使用b:if语句检索匹配指定标签?
报错核心原因
原代码无法正常运行有两个问题:
- Blogger的模板标签语法不支持直接对
data:post.labels(标签对象数组)使用in关键字做集合匹配 data:post.labels返回的不是纯标签名数组,是结构化的标签对象集合,每个标签的实际名称存储在name属性中,直接拿整个标签对象和字符串值比对永远无法命中
修正后可运行代码
要实现检测文章是否包含指定标签的需求,需要先遍历单篇文章的标签列表做匹配,再根据匹配结果执行对应逻辑,代码如下:
<b:loop index='i' values='data:posts' var='post'> <b:with var='hasReferansLabel' value='false'> <!-- 遍历当前文章的所有标签做匹配 --> <b:loop values='data:post.labels' var='label'> <b:if cond='data:label.name == "referans"'> <b:with var='hasReferansLabel' value='true'/> </b:if> </b:loop> <!-- 匹配到目标标签时才加载对应模块 --> <b:if cond='data:hasReferansLabel'> <b:include data='post' name='postCommentsAndAd'/> </b:if> </b:with> </b:loop>
扩展用法
如果需要同时匹配多个目标标签,只需要修改标签判断的条件即可,示例:
<b:if cond='data:label.name in {"referans", "教程", "资源"}'> <b:with var='hasReferansLabel' value='true'/> </b:if>
注意in关键字只能用于字符串/数字这类基础值的集合匹配,不能直接作用在对象数组上。
内容的提问来源于stack exchange,提问作者selcukctn
相关产品推荐
相关产品推荐

