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。我以前试过,现在也试过你的,但它不起作用。返回的规范是&lt;link rel="canonical" href=" shop.url collection.url /++ /&gt;。分配的变量 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/++。在&lt;head&gt; 标签内的 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

在 Shopify 液体模板中使用 vue.js

Shopify 应用程序可以在商店主题内自动注入液体代码吗?

在页面模板液体(Shopify)中显示来自 settings_data.json 的 JSON 数据数组