Menu
Overview​
Menus are assembly structures that group and organize entities in your store. They create hierarchical relationships between categories, collections, and pages. The most common use case is storefront navigation.
You can create menus in the Saleor Dashboard in the Configuration → Navigation page.
Lifecycle​
Menu operations require the MANAGE_MENUS
permission.
Creating a Menu​
A menu requires a name and can optionally have a slug. You can create a menu with or without items with the menuCreate
mutation:
mutation CreateMenu($input: MenuCreateInput!) {
menuCreate(input: $input) {
menu {
id
name
slug
items {
id
name
level
}
}
errors {
field
message
code
}
}
}
A menu item can link to one of the following entities:
- Category
- Collection
- Page
- URL
Here is an example input for creating a menu:
{
"name": "Example Menu Item",
"slug": "example-menu-item",
"items": [
{
"name": "Category Menu Item",
"category": "Q2F0ZWdvcnk6MjY="
},
{
"name": "Collection Menu Item",
"collection": "Q29sbGVjdGlvbjozMjA="
},
{
"name": "Page Menu Item",
"page": "UGFnZToxMjM="
},
{
"name": "URL Menu Item",
"url": "https://www.saleor.io"
}
]
}
You can also create the menu item itself through the menuItemCreate
mutation:
mutation CreateMenuItem($input: MenuItemCreateInput!) {
menuItemCreate(input: $input) {
menuItem {
id
name
slug
children {
id
name
level
}
}
}
}
Menu items can be nested to create a hierarchy. For example, the following input creates a menu item as a child of another menu item:
{
"name": "Parent Menu Item",
"url": "https://www.saleor.io",
"parent": "Q2F0ZWdvcnk6MjY=",
}
Getting Menus​
To retrieve all menus, use the menus
query:
menus(first: $first) {
edges {
node {
id
name
slug
items {
id
name
level
category {
id
name
}
collection {
id
name
}
page {
id
title
}
children {
id
name
level
}
}
}
}
}
To get a specific menu by ID, name, or slug, use the menu
query:
query GetMenu($id: ID, $name: String, $slug: String) {
menu(id: $id, name: $name, slug: $slug) {
id
name
slug
items {
id
name
level
category {
id
name
}
collection {
id
name
}
page {
id
title
}
}
}
}
Deleting a Menu​
To remove a menu and all its items, use the menuDelete
mutation:
mutation DeleteMenu($id: ID!) {
menuDelete(id: $id) {
menu {
id
name
slug
}
errors {
field
message
code
}
}
}
Webhooks​
Here are the webhooks that are available for menus: