如何在Shopify Block Schema中创建含变量的动态链接?
问题解答
核心结论
不能在Block的schema中直接解析{{ shop.domain }}、{{ block.id }}这类Liquid动态变量。因为schema是用于定义区块配置结构的JSON格式代码,仅作用于Shopify后台的配置界面,不会执行Liquid渲染逻辑,写入的变量会被当作纯文本输出。
推荐替代方案
1. 前端Liquid模板中渲染动态链接(最适合公开页面场景)
在schema中仅定义按钮的静态配置项(如显示文本),实际的动态URL在区块的Liquid模板文件中拼接生成,这是你需要的前端公开页面场景的最优解。
示例代码:
- schema部分(仅定义按钮文本):
{ "type": "block", "name": "应用设置按钮", "settings": [ { "type": "text", "id": "button_label", "label": "按钮显示文本", "default": "打开应用设置" } ] }
- 区块Liquid模板部分(生成动态链接):
{% if block.settings.button_label %} <a href="https://你的应用域名.com/config?shop={{ shop.domain | url_encode }}&block_id={{ block.id }}" class="app-settings-btn"> {{ block.settings.button_label }} </a> {% endif %}
2. 后台配置界面用App Bridge生成动态链接(针对后台场景)
如果是想在Shopify后台的区块配置面板中添加跳转链接,其他应用常用的方式是借助Shopify App Bridge获取当前上下文的店铺域名和区块ID,动态生成链接。
示例代码(React环境):
import { Redirect } from '@shopify/app-bridge/actions'; import { useAppBridge } from '@shopify/app-bridge-react'; function AppSettingsButton({ blockId, shopDomain }) { const app = useAppBridge(); const handleRedirect = () => { Redirect.create(app).dispatch( Redirect.Action.APP, `/settings?shop=${shopDomain}&block_id=${blockId}` ); }; return <button onClick={handleRedirect}>打开应用设置</button>; }
3. 预生成链接并存入元字段(复杂场景)
若有特殊需求需在schema中关联动态链接,可通过应用后端逻辑实现:
- 监听区块的创建/更新事件(通过Shopify Webhooks)
- 生成包含
shop.domain和block.id的动态URL,存入区块的元字段(metafield) - 在schema的链接字段中读取该元字段的值
此方案复杂度较高,仅适合特定业务场景。
其他应用实现方式说明
- 前端公开页面的动态链接:基本都是采用第一种方案,直接在Liquid模板中拼接变量生成URL
- 后台配置界面的动态链接:依赖Shopify App Bridge获取当前店铺、区块的上下文参数,动态构造跳转地址
内容的提问来源于stack exchange,提问作者Developer




