Shopify 知识库 · 概念
Shopify Functions 与扩展点:服务端逻辑与界面扩展
区分 Shopify Functions(在 Shopify 后端执行的自定义逻辑)与各类界面扩展(主题应用扩展、结账 UI 扩展、后台与 POS 扩展),说明官方列出的 Function API、资源上限、应用块与应用嵌入的差别、套餐限制,以及 script tags 的弃用时间。
“应用要在 Shopify 里加一段逻辑或界面”有两类完全不同的落点:Functions 在 Shopify 后端的请求路径里执行自定义逻辑,没有界面;**扩展(extensions)**把界面放进 Shopify 的某个位置。官方把应用能触达的位置称为 app surfaces,并把扩展描述为“把你的界面放进 Shopify 的各个位置”,把 Functions 描述为“在 Shopify 的请求路径里运行你的逻辑”,由 Shopify 托管。App surfaces。本文只做分类与限制;不写具体语言或框架的开发教程,也不替代扩展位置选型。
本库哪些内容依赖它
- 原生配置、应用与开发:先按位置选择原生配置、应用还是开发,本文提供各位置的官方分类;
- 结账自定义:结账 UI 扩展、Functions 在结账的分工与套餐门槛,本文不重复;
- 折扣:折扣 Functions 的作用对象;
- 套餐:扩展与 Functions 的套餐门槛汇总;
- 主题结构、自有评价、第三方评价、评价展示模块:应用块与应用嵌入的店面落点;
- Web Pixels:采集类扩展;Admin API 与 Webhooks:不落在界面上的服务端集成;
- Flow:不写代码的后台自动化,可先判断它是否够用;B2B 提到的 Payment Customization Function。
本文是 Functions 与扩展点分类的权威来源,其他文章只写各自页面语境下的用法。
核心对象与概念
| 对象 | 含义 | 备注 |
|---|---|---|
| Shopify Functions | 接收 JSON 输入(由 GraphQL 查询取得),执行编译为 WebAssembly 的逻辑,返回 JSON 输出,由 Shopify 执行 | 不能被 URL 直接调用;Shopify 在顾客旅程中按需调用 |
| Function API | Functions 针对某个业务点的接口 | 列表见下 |
| Theme app extension | 让商家不接触 Liquid 就能给主题添加动态元素的应用扩展 | 含 app block 与 app embed block 两种集成 |
| App block | 应用提供的行内内容,商家在主题编辑器的分区里添加并定位 | 需兼容主题 |
| App embed block | 加载 JavaScript、无界面,或浮动 / 覆盖层类元素 | 任何主题版本可用 |
| Checkout UI extensions | 向结账流程与订单状态页添加界面 | 目标与套餐限制见结账自定义 |
| Admin / POS extensions | 后台与 POS 中的界面扩展 | 下文只列官方分类 |
| App proxy | 把店铺域名下某路由的请求转发到外部来源,以在店面页展示数据 | 应用面页所写 |
在哪里配置
- Functions 与扩展都作为应用扩展部署,随应用版本发布,商家通过应用与相关设置项启用。具体入口因 Function API 而异:例如支付与配送定制在 Settings > Payments 的 Payment customizations 与 Settings > Shipping and delivery 的 Delivery customizations(后两项已在结账自定义一文核实)。
- 应用块:主题编辑器中,在分区或模板里点 Add block,从 Apps 部分选择,可添加、删除、重排与自定义。应用嵌入:Online Store > Edit theme 后,点侧栏的 App embeds 图标,可启用、停用与自定义。Extend your theme with apps
- 函数日志:Dev Dashboard 的应用 Logs 区的 Functions 部分。Function 失败与监控
与主题、Liquid 和 API 的连接
- 主题应用扩展不改主题代码。 官方写明基于该框架的应用“不编辑主题代码”,以降低破坏性变更风险;扩展由 Liquid 区块、资源(CSS、JavaScript、静态内容)和片段(可复用 Liquid)组成,与 Online Store 2.0 主题集成。Theme app extensions
- 与本库既有描述一致。 第三方评价与图集等文章写的是“App blocks 仅兼容主题可用,App embeds 任何主题版本可用”,与上述帮助页相同;Horizon 主题的评价区需要
@app块,见Horizon 徽章、评价与订阅。评价的汇总 metafield 由评价应用维护,见自有评价。 - Functions 的数据入口。 输入由 GraphQL 查询定义,输出是 Shopify 执行的操作。应用另用 Admin API 创建和配置这些 Functions 的业务对象(如折扣),二者是两条路径。
- script tags 已弃用。 online store 应用面页写明:“Script tags 已弃用。2026 年 10 月 1 日之后不能创建或更新,2027 年 3 月 1 日 Shopify 将停止把它们加入店面。”核验日 2026-09-29 距创建截止仅数日;仍依赖 script tag 的应用应迁移到主题应用扩展或 Web Pixels,迁移路径见官方 script tag deprecation 页(本文未读)。Online store
官方分类清单
| 位置 | 官方分类(原文名) | 说明 |
|---|---|---|
| App surfaces | App Home、Admin、Checkout、Customer accounts、Online store、Point of Sale (POS) | 应用面页所列六个位置,另有 Extensions 与 Functions 两类技术组件 |
| Online store | Theme app extensions(app blocks、app embed blocks)、App proxies、Web pixels、Storefront API、Script tags(已弃用) | Web pixels 见本库专文 |
| Admin | Admin actions、Admin blocks、Admin print actions、Admin link extensions、Admin intents、Discounts UI extensions、Product configuration extensions、Purchase options extensions、Product subscription extensions、Customer segment action extensions,以及 Inventory management、Order management、Order routing、Returns 类应用 | 只列名,不展开 |
| POS | Tiles、Actions、Blocks | 智能网格磁贴、由菜单按钮启动的模态或全屏视图、屏幕内的自定义区块 |
Function API 与限制
Function APIs 参考页(最新版本显示为 2026-07)列出:Cart Transform、Discount、Fulfillment Constraints、Order Routing Location Rule、Pickup Point Delivery Option Generator、Local Pickup Delivery Option Generator、Delivery Customization、Payment Customization、Cart and Checkout Validation 九类。Function APIs。Functions 概览页给出的用例名称略有不同,还含 Bundle、Local pickup charges、Pickup points 等,两页并列,不选边,以实际所用 API 的参考页为准。
核验于 2026-09-29,来源为 Function APIs 参考页:
- 固定上限:编译后的二进制 256 kB;运行时线性内存 10,000 kB;栈内存 512 kB;日志写入 1 kB(截断)。
- 动态上限(最多 200 个行项目时):执行指令 1100 万条;输入 128 kB;输出 20 kB(页面注明不支持批量价格变换)。超过 200 个行项目时,动态上限按行数比例放大。
- 输入查询上限:查询大小 3000 字节(不含注释);列表类型的参数与变量最多 100 个元素;输入查询最大计算成本 30;值超过 10,000 字节的 metafield 不会被返回。
- 失败方式:Functions 可能因抛出异常、超出内存或时间上限、返回不符合 schema 的数据而失败。失败时结账的回退行为官方页未写,未核验;上线前必须在测试结账里实测。
- 套餐:概览页写明只有 Shopify Plus 店铺能使用含 Function API 的自定义应用,来自应用商店的公共应用各套餐可用;本库套餐另并列了开发文档中“除 Starter 外所有套餐”与部分 API 需 feature preview 的表述,本文不选边。
- 语言:官方页写明强烈推荐 Rust,也支持 JavaScript;细节不在本文范围。
验证一次
- 先判断需求属于哪个位置:改后台逻辑用 Functions,改店面界面用主题应用扩展,改结账界面走结账 UI 扩展;无法归类时回到扩展位置选型;
- 在开发店安装含应用块的应用,在主题编辑器 Add block 里确认能否找到该应用;换一个较旧主题或不兼容主题,再确认应用块是否不可用而 App embeds 是否仍可启用;
- 切换已发布主题后回到 App embeds,核对应用是否仍处于启用状态(帮助页写明切换主题后需重新激活);
- 部署一个 Function,在测试结账里触发,再到 Dev Dashboard 的 Logs 查看运行记录;故意让 Function 返回错误,记录结账实际表现;
- 核对所用套餐(含开发店与正式店)对该扩展与 Function 的要求,再对照套餐;
- 检查是否仍有 script tag 依赖,确认迁移计划早于上述两个日期。
待继续完善
- 各 Function API 的输入输出与适用限制,需逐个 API 读取;
- 主题应用扩展的数量与体积限制、卸载后的清理行为(官方页未写);
- Admin、POS、Customer accounts 扩展的目标与能力,需分别核验;
- script tag deprecation 页的迁移路径。