使用 Shopify API 修改 theme.liquid

Arc*_*rma 4 javascript python api rest shopify

我希望javascript使用Shopify API为整个商店的一些分析添加一个片段。我发现使用admin/themes/:id/assets.json我可以修改theme.liquid以插入片段,但这会更改页面的整个内容。我当前所做的 API 调用是

admin/themes/35073539/assets.json
{
  "asset": {
    "key": "layout\/theme.liquid",
    "value": "{{content_for_header}}<script>console.log('foo')</script>"
  }
}
Run Code Online (Sandbox Code Playgroud)

这显然行不通。

我只想修改<head>标签并插入一些自定义javascript. 此外,ScriptTag也不会有用,因为我必须从用户那里获取一些输入,在我的输入中使用该输入javascript,然后插入代码段。任何帮助,将不胜感激。

Tec*_*ant 7

首先,您需要获取所有资产的列表,以确保在端点 URL 中使用正确的 ID。(/assets.json 之前的长数字)

GET /admin/themes/#{id}/assets.json
Run Code Online (Sandbox Code Playgroud)

然后你想将当前文件的副本保存到服务器作为备份,只是为了安全......

PUT /admin/themes/#{id}/assets.json
{
  "asset": {
    "key": "layout\/theme.bak.liquid",
    "source_key": "layout\/theme.liquid"
  }
}
Run Code Online (Sandbox Code Playgroud)

由于您使用的方法会覆盖现有文件,因此您需要下载当前文件,将 HTML 提取到 javascript 变量中,修改该 HTML,然后像上面一样将 HTML 发送回去。

首先下载theme.liquid....

GET /admin/themes/#{id}/assets.json?asset[key]=layout/theme.liquid&theme_id=828155753
Run Code Online (Sandbox Code Playgroud)

这将返回该文件的 HTML 等,您需要添加/更改此文件的内容,然后按照您已经发送的方式发送该内容...

PUT /admin/themes/#{id}/assets.json
{
  "asset": {
    "key": "layout\/theme.liquid",
    "value": "*****The HTML FOR THEME.LIQUID"
  }
}
Run Code Online (Sandbox Code Playgroud)

那应该这样做。如果成功,现在应该添加代码。

希望这会有所帮助,如果您有任何问题,请告诉我。

  • 您需要订阅 [`themes/update`](https://shopify.dev/docs/admin-api/rest/reference/events/webhook) webhook 并在新主题设置为主主题后更新它。 (2认同)