Shopify 液体循环 current_tags
Posted
技术标签:
【中文标题】Shopify 液体循环 current_tags【英文标题】:Shopify liquid loop current_tags 【发布时间】:2020-08-22 02:20:38 【问题描述】:Shopify 为每个集合过滤器创建一个 URL。此 URL https://example.com/collections/default/type_tag+size_tag+width_tag
将过滤名为 default
的集合中的产品,以显示带有 type_tag、size_tag、width_tag 标记的产品。
这还会创建一个规范链接,其 href
与上述 URL 相同。在这个例子中,规范的 href 是 <link rel="canonical" href="https://example.com/collections/default/type_tag+size_tag+width_tag">
我们希望针对 SEO 进行优化。对于具有相同过滤器但反向的 URL(因此产生相同的页面和过滤的内容),我们希望具有相同的规范 href。
例如:这些 URL 将过滤集合 default
中的相同产品,并显示具有匹配 href 值的规范。
https://example.com/collections/default/type_tag+size_tag+width_tag
https://example.com/collections/default/size_tag+width_tag+type_tag
https://example.com/collections/default/type_tag+width_tag+size_tag
https://example.com/collections/default/width_tag+type_tag+size_tag
无论上面的 URL 是什么,我们都希望将规范的 href 固定为我们设置的那个。因此,作为示例,我们希望上述 URL 具有 https://example.com/collections/default/type_tag+size_tag+width_tag
作为规范。
如您所知,我们的标签分为 type_、size_ 和 width_。
我尝试了几种方法来遍历% current_tags %
对象,以检查 % current_tags % 中的任何标签是否包含 type_、size_ 和 width_。以下是我的想法,但显然它不起作用,所以它是垃圾。请有新的想法,谢谢!!!
% if template contains 'collection' and current_tags %
% for tag in current_tags %
% if current_tags contains 'type_' %
% assign type_tag_url = tag %
% elsif current_tags contains 'size_' %
% assign size_tag_url = tag %
% elsif current_tags contains 'width_' %
% assign width_tag_url = tag %
% endif %
% endfor %
<link rel="canonical" href=" shop.url collection.url /type_tag_url+size_tag_url+width_tag_url" />
% else %
<link rel="canonical" href=" canonical_url ">
% endif %
【问题讨论】:
【参考方案1】:current_tags
是一个数组。当您使用 contains
运算符在数组中查找项目时,比较基于完全匹配进行。所以你不能用它来检查它是否包含包含部分字符串的标签,比如type_
。请检查标签本身,例如:
% if template contains 'collection' and current_tags %
% for tag in current_tags %
% if tag contains 'type_' %
% assign type_tag_url = tag %
% elsif tag contains 'size_' %
% assign size_tag_url = tag %
% elsif tag contains 'width_' %
% assign width_tag_url = tag %
% endif %
% endfor %
<link rel="canonical" href=" shop.url collection.url /type_tag_url+size_tag_url+width_tag_url" />
% else %
<link rel="canonical" href=" canonical_url ">
% endif %
【讨论】:
感谢您查看@Vladimir。我以前试过,现在也试过你的,但它不起作用。返回的规范是<link rel="canonical" href=" shop.url collection.url /++ />
。分配的变量 type_tag_url, size_tag_url, width_tag_url
返回空或未定义。
我刚刚对其进行了测试,它按预期工作。我打开了/collections/test/size_m+type_t-shirt+width_45cm
路径,下面是规范 URL 的样子:/collections/test/type_t-shirt+size_m+width_45cm
我一辈子都想不通为什么我的返回/collections/default/++
。在<head>
标签内的 theme.liquid 中,我有% render 'canonicals' %
。我的规范代码位于名为 canonicals.liquid
的 sn-p 文件中。无论如何,我会接受答案。谢谢
我刚刚使用 sn-p 和 render
运算符对其进行了测试,并得到了工作结果。真奇怪。是否有可用于测试的公共 URL?
请查看此小提琴jsfiddle.net/7Lcv2qfb 以获取预览我们测试站点的链接。谢谢以上是关于Shopify 液体循环 current_tags的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 代码中格式化液体(Shopify)代码
在 Shopify 液体中使用 @font-face 时的字体文件 404