自定义 Liquid
编写您自己的 Liquid 代码片段来决定访问权限,可使用客户、购物车、产品和店面变量。
Custom liquid 规则允许您编写自己的 Liquid 代码片段,来决定访客是否获得访问权限。这是应用中最灵活的规则:凡是能针对客户、购物车、当前产品或产品系列、或店面本身写成 Liquid 条件的内容,都可以用来限制访问。但它也是唯一一个代码片段出错会带来实际后果的规则,详见下文。
Custom liquid 是基于操作的规则,因此没有 If/Unless 开关。应用会为每位访客运行您的代码片段,并读取其最终结果。结果必须恰好是 true 或 false(忽略前后空白):true 表示通过规则,false 表示未通过。其他输出(例如 true - customer is eligible)不是有效结果。您的代码片段可以访问与 Shopify 模板中关于当前访客和页面的同类数据。
打开锁定,点击 Unlock rules 标签页,然后从 Condition type 下拉菜单中选择 Custom liquid。

在 Unlock rules 标签页的 Condition type 下拉菜单中选择 Custom liquid。
选择该规则的条件类型后,会打开专用的 Liquid 代码编辑器,支持语法高亮、自动补全和实时语法验证,Liquid 中的错误会在您输入时直接在编辑器中标出,无需等到保存。

在代码编辑器中编写并验证 Liquid 代码片段。
编辑器提供了一个可插入的变量库,按描述对象分组:
| 分组 | 变量 |
|---|---|
| 客户 | customer, customer.tags, customer.orders_count, customer.total_spent, customer.b2b? |
| 购物车 | cart.item_count, cart.total_price, cart.items |
| 产品和产品系列 | product.tags, product.vendor, product.metafields, collection.handle |
| 店面 | request.path, request.page_type, localization.country.iso_code, localization.language.iso_code |

在 Variables and templates 面板中浏览可用变量。
如果您希望从可用的内容开始,而不是面对空白编辑器,同一面板中包含现成的模板,您可以直接使用并调整,包括已登录客户检查、客户标签检查、购物车数量或购物车总额下限、产品标签检查、访客国家/地区检查、URL 路径检查,以及直接检查 customer.b2b? 的现成 Shopify B2B customer 模板。

选择入门模板,包括现成的 Shopify B2B 模板。
- 打开要保护的锁定,然后点击 Unlock rules 标签页。
- 添加访问规则,并将条件类型设置为 Custom liquid。
- 直接在编辑器中编写代码片段,或打开 Variables and templates 复制变量,或从现成的模板开始。
- 确保代码片段的最终输出对应通过的访客恰好为
true,对其他所有人恰好为false。不要在该值前后添加说明文字、HTML 或其他输出。编辑器会标出基本的语法问题,但您仍需确认逻辑符合您的预期。 - (可选)为该规则设置 Redirect URL,仅在此特定规则拒绝访客时使用。
- 保存锁定。
失败时放行的行为
Section titled “失败时放行的行为”示例:允许带有 VIP 标签的已登录客户
Section titled “示例:允许带有 VIP 标签的已登录客户”假设一个私密页面只应对账户带有 vip 标签的已登录客户开放。
- 选择 VIP collection preview 页面作为要保护的内容。

选择要留给 VIP 客户的页面。
- 添加 Custom liquid,并将入门代码片段替换为:
{% if customer and customer.tags contains 'vip' %}true{% else %}false{% endif %}输入时,编辑器会在下方确认 Liquid syntax is valid。

编辑器会高亮 Liquid,并在保存前验证语法。
- 将规则的 Redirect URL 留空。
- 将 Access denied message 设置为:
This page is available to VIP customers only.

Custom liquid 只有一个提示信息字段,会显示给所有被代码片段拒绝的人。
- 点击 Save。
对于带有 vip 标签的已登录客户,代码片段恰好输出 true,因此页面正常打开。对于访客和没有该标签的客户,代码片段恰好输出 false,因此他们会看到上述提示信息。请不要在代码片段输出的 true 或 false 前后添加文字。

当 Liquid 代码片段返回 false 时,访客会看到本示例中的 Access denied message。