Use metaobject capabilities
Capabilities power optional features for metaobject definitions. You can enable the following capabilities
:
publishable
: Set metaobjects as eitherDRAFT
orACTIVE
to control visibility in storefronts.translatable
: Allow metaobject translations through Shopify's translation APIs.renderable
: Set SEO metadata attributes on your metaobjects.onlineStore
: Assign a theme template and define a URL to make your metaobjects render web pages in the online store.
Anchor to Draft custom contentDraft custom content
The publishable
capability enables users of your metaobject to set its status to either DRAFT
or ACTIVE
. This can be useful for providing users a way to stage their content before making it available to their storefronts - even if you defined it to be available to storefronts using access controls.
In the following example, the metaobjectDefinitionCreate
mutation is called with publishable
set to true
to enable this capability:
shopify.app.toml
[metaobjects.app.custom_article]
name = "Custom Article"
access.admin = "merchant_read_write"
access.storefront = "public_read"
capabilities.publishable = true
[metaobjects.app.custom_article.fields.title]
name = "Title"
type = "single_line_text_field"
[metaobjects.app.custom_article.fields.body]
name = "Body"
type = "rich_text_field"
[metaobjects.app.custom_article.fields.author]
name = "Author"
type = "single_line_text_field"
mutation {
metaobjectDefinitionCreate(definition: {
name: "Custom Article"
type: "$app:custom_article"
access: {
admin: MERCHANT_READ_WRITE
storefront: PUBLIC_READ
}
capabilities: {
publishable: {
enabled: true
}
}
fieldDefinitions: [
{ key: "title", name: "Title", type: "single_line_text_field" }
{ key: "body", name: "Body", type: "rich_text_field" }
{ key: "author", name: "Author", type: "single_line_text_field" }
]
}) {
metaobjectDefinition {
id
type
capabilities {
publishable {
enabled
}
}
fieldDefinitions {
key
name
type {
name
}
}
}
}
}
Next, using the metaobjectCreate
mutation, you'll notice that the default status for a created "Custom Article" metaobject is DRAFT
.
Creating a Custom Article metaobject
GraphQL Mutation
Variables
JSON response
To publish the custom article metaobject, you can use the metaobjectUpdate
mutation and set the status to ACTIVE
.
Publishing the custom article
GraphQL Mutation
Variables
JSON response
Anchor to Make your metaobjects translatableMake your metaobjects translatable
The translatable
capability allows the fields of a metaobject to be translated. You can enable this capability by setting translatable
to true
when creating or updating a metaobject definition.
Update a Custom Article metaobject to be translatable
GraphQL mutation
Variables
JSON response
Once translatable
has been enabled, you can use Shopify's translation APIs to register translations for fields on your metaobjects. For the "Custom Article" metaobject, you'll first need to retrieve the fields that can be translated through the translatableResources
query:
Query for translatable metaobjects
GraphQL query
JSON response
Then, you can register translations for any of the fields on the metaobject. For example, you can translate the title
field by passing in the metaobject ID and using the digest
for the title
field:
Register a translation for the title field on the Custom Article metaobject
GraphQL mutation
Variables
JSON response
Anchor to Render metaobjects as web pagesRender metaobjects as web pages
The renderable
capability exposes metaobject SEO fields to Liquid and the Storefront API. Metaobjects with this capability are also included in the store's sitemap, which is sitemap.xml
for Liquid storefronts and accessible using the Sitemap
query in the Storefront API.
You can enable this capability by setting renderable
to true
when creating or updating a metaobject definition.
In the following example, a metaobject definition is created with renderable
set to true
to enable this capability and sets the meta title and description attributes to the title
and body
fields respectively:
shopify.app.toml
[metaobjects.app.renderable_content]
name = "Renderable Content"
access.admin = "merchant_read_write"
access.storefront = "public_read"
capabilities.renderable = true
[metaobjects.app.renderable_content.fields.title]
name = "Title"
type = "single_line_text_field"
[metaobjects.app.renderable_content.fields.body]
name = "Body"
type = "rich_text_field"
mutation {
metaobjectDefinitionCreate(definition: {
name: "Renderable Content"
type: "$app:renderable_content"
access: {
admin: MERCHANT_READ_WRITE
storefront: PUBLIC_READ
}
capabilities: {
renderable: {
enabled: true
data: {
metaTitleKey: "title"
metaDescriptionKey: "body"
}
}
}
fieldDefinitions: [
{ key: "title", name: "Title", type: "single_line_text_field" }
{ key: "body", name: "Body", type: "rich_text_field" }
]
}) {
metaobjectDefinition {
id
name
capabilities {
renderable {
enabled
data {
metaTitleKey
metaDescriptionKey
}
}
}
}
}
}
Anchor to Make your metaobjects render web pages in the Online StoreMake your metaobjects render web pages in the Online Store
Currently, the onlineStore
capability is not supported in TOML configuration.
The onlineStore
capability enables a metaobject to have an Online Store template and URL assigned to a metaobject definition. You can enable this capability by setting onlineStore
to true
when you perform a metaobjectDefinitionCreate
or metaobjectDefinitionUpdate
mutation.
In the following example, the metaobjectDefinitionCreate
mutation is called with renderable
set to true
and onlineStore
set to true
to enable the web pages feature for the definition. The urlHandle
is set to content
resulting in the following URL for metaobject entries: /pages/content/{entry-handle}
.