Add configuration to your discounts experience
You can use metafields for the configuration of your product discount function. Metafields provide greater flexibility to use functions, and are a prerequisite to creating a user interface for configuring functions.
What you'll learn
Anchor link to section titled "What you'll learn"In this tutorial, you'll learn how to do the following tasks:
- Add metafields to your GraphQL input query.
- Use metafield values in your function logic.
- Populate metafields on the function owner with GraphQL.
Requirements
Anchor link to section titled "Requirements"- You've completed the Getting started with building a discounts experience tutorial.
Step 1: Configure the function
Anchor link to section titled "Step 1: Configure the function"To make your function reusable, you can replace hardcoded values in your function with metafield values. You can update your input query to request a metafield value on the created product discount, which is the function owner for this function API. You can then use that value in your function logic.
Navigate to your function in
extensions/product-discount
.Replace the code in the
input.graphql
file with the following code.This update to the input query adds a metafield from the
discountNode
object, which is the function owner.If you're using JavaScript, then run the following command to regenerate types based on your input query:
Replace the
src/index.js
orsrc/main.rs
file with the following code.This update includes parsing the JSON metafield value, and using values from that JSON in the function logic instead of hardcoded values.
Navigate back to your app root and deploy your app:
A message from the CLI displays and indicates that your
product-discount
function is live.
Step 2: Populate the product discount configuration metafield
Anchor link to section titled "Step 2: Populate the product discount configuration metafield"To populate the configuration metafield, you'll first use the discountNodes
query to confirm the product discount ID, and then use the discountAutomaticAppUpdate
mutation to populate the same metafield that you specified in the input query.
If you were updating a code-based discount, then you would use discountCodeAppUpdate
instead of discountAutomaticAppUpdate
.
Open the Shopify GraphiQL app on your development store.
Execute the following query, and make note of the
id
value of the product discount that you created in the previous tutorial. For more information about global IDs, refer to Global IDs in Shopify APIs.Execute the following mutation and replace
YOUR_DISCOUNT_ID_HERE
with the full global ID of your product discount.The value of the metafield specifies that the function should discount products by 15% when they have a quantity of three or more.
If the response includes any messages under
userErrors
, then review the errors, check that your mutation and discount ID are correct, and try the request again.
Step 3: Test the product discount
Anchor link to section titled "Step 3: Test the product discount"You can test your product discount to ensure it's working as expected, and review logs for your function.
Open your development store and build a cart with a single item in it.
No discounts should be applied to the cart.
Increase the item quantity to three.
The 15% Volume discount should now be applied to the cart.
To debug your function, or view its output, you can review its logs in your Partner Dashboard:
- Log in to your Partner Dashboard and navigate to Apps > {your app} > Extensions > product-discount.
- Click on any function run to view its input, output, and any logs written to
STDERR
.
- Build a discounts user interface with App Bridge.
- Learn how to use variables in your input query