如何通过Shopify API获取主题配置的首页Banner及广告数据?
完全可以通过Shopify的Storefront GraphQL API或Admin REST API实现这个需求,具体操作分两种场景说明:
一、使用Storefront GraphQL API(推荐移动端前端直接调用)
因为你正在基于Storefront GraphQL开发应用,优先用这个API——它专为前端展示场景设计,无需管理员权限,仅需店铺的Storefront Access Token即可调用。
1. 提取首页Sections中的Banner/广告数据
多数Shopify主题会用Sections组件构建首页Banner、广告模块,你可以直接查询首页的所有Sections,根据组件类型筛选目标数据:
query FetchHomepageContent { shop { currentPublication { homepage { sections { nodes { type settings blocks { nodes { type settings } } } } } } } }
- 解析逻辑:根据返回的
type字段(比如主题定义的hero-banner、promo-ad等)定位目标组件,从settings或blocks[].settings中提取图片URL、跳转链接、文案等信息。 - 图片URL处理:如果返回的是相对路径,拼接成完整CDN地址:
https://{你的店铺域名}.myshopify.com{相对路径}。
2. 获取主题自定义元字段中的广告数据
如果商家通过主题的自定义元字段存储Banner/广告信息,可直接查询主题的Metafields:
query FetchThemeMetafields { shop { currentTheme { metafields(namespace: "custom", keys: ["top_banner", "mid_promo"]) { nodes { key value type } } } } }
- 说明:
namespace和keys需要和主题后台配置的元字段对应;如果元字段类型是json,需将value解析为JSON对象后使用。
二、使用Admin REST API(适合后端中转调用)
Admin API能获取更全面的主题配置,但需要店铺管理员权限,绝不能在移动端前端直接调用(会泄露敏感密钥),适合通过你的后端服务中转请求。
1. 获取主题完整配置数据
调用GET /admin/api/2024-07/themes/{theme_id}.json,响应中的theme.settings_data是存储所有主题设置的JSON字符串,包含Banner、广告的配置:
{ "theme": { "id": 123456789, "settings_data": "{\"sections\":{\"hero-banner\":{\"type\":\"hero-banner\",\"settings\":{\"image\":\"/cdn/shop/files/summer_banner.jpg\",\"heading\":\"Summer Flash Sale\",\"button_link\":\"/collections/summer-collection\"}}}}" } }
- 操作:解析这个JSON字符串,提取目标Banner/广告的配置项即可。
2. 查询主题自定义元字段
调用GET /admin/api/2024-07/themes/{theme_id}/metafields.json,可获取主题的所有自定义元字段,筛选出需要的Banner/广告数据即可。
关键注意事项
- 不同主题的Sections类型、配置字段名存在差异,建议先在Shopify GraphQL Playground(Storefront环境)或Admin API测试工具中验证查询结果,再调整解析逻辑。
- Storefront API的权限范围需包含
read_themes,确保能正常获取主题相关数据。
内容的提问来源于stack exchange,提问作者Mitul Bhadeshiya
相关产品推荐
相关产品推荐

