我创建了一个 Shopify 函数,作为购物车和结账验证扩展。它尝试要求名字、姓氏和电话号码输入字段。我知道 Shopify 管理设置中有一种本地方法可以执行此操作,但是,如果您在 Shopify B2B 中启用运送到任何地址,它将覆盖此设置。
该功能的问题在于它在结帐之外的其他购物车操作中运行。当客户登录并且没有与其关联的名字或电话号码时,这会带来问题,并且在将产品添加到购物车时会引发错误。
我尝试在 run.js 文件中添加各种条件,例如检查 paymentAddress、deliveryOptions、selectedDeliveryOption 等,作为确定我们是否处于结帐步骤的一种方式,但是,所有这些条件也都会返回/可访问由于某种原因在结帐之前。
有没有办法让这个函数只在结账时执行?
您可以在下面看到我的shopify.extension.toml:
api_version = "2024-10"
[[extensions]]
name = "t:name"
handle = "required-input-field-validations"
type = "function"
description = "t:description"
[[extensions.targeting]]
target = "purchase.validation.run"
input_query = "src/run.graphql"
export = "run"
[extensions.build]
command = ""
path = "dist/function.wasm"
这是我的 run.js 文件:
// @ts-check
/**
* @typedef {import("../generated/api").RunInput} RunInput
* @typedef {import("../generated/api").FunctionRunResult} FunctionRunResult
*/
/**
* The entry point for the Shopify Function
*
* @param {RunInput} input
* @returns {FunctionRunResult}
*/
export function run(input) {
const errors = [];
// Access delivery address information from the input
const deliveryGroups = input.cart.deliveryGroups || [];
const deliveryAddress = deliveryGroups[0]?.deliveryAddress || {};
const firstName = deliveryAddress.firstName || '';
const lastName = deliveryAddress.lastName || '';
const phone = deliveryAddress.phone || '';
// Debugging logs
console.log('First Name:', firstName);
console.log('Last Name:', lastName);
console.log('Phone:', phone);
// Validate First Name
if (!firstName.trim()) {
errors.push({
localizedMessage: 'Please enter your first name.',
target: 'deliveryAddressFirstName',
});
}
// Validate Last Name
if (!lastName.trim()) {
errors.push({
localizedMessage: 'Please enter your last name.',
target: 'deliveryAddressLastName',
});
}
// Validate Phone Number
if (!phone.trim()) {
errors.push({
localizedMessage: 'Please enter your phone number.',
target: 'deliveryAddressPhone',
});
}
return { errors };
}
谢谢你。
我提出了一个想法,但尚未完全测试它。
我相信购物车级别有一个 BuyerJourney 输入并具有以下值:
购物车互动 买家正在与购物车互动。
CHECKOUT_COMPLETION 买家正在完成结帐。
结账_互动 买家正在与结账互动。
我打赌你可以为 BuyerJouneyStep 等于 CHECKOUT_INTERACTION 做一个逻辑门,然后在那里运行你的验证逻辑。