@mab/gatsby-plugin-slug-field
v0.3.0
Published
Create slugs from node data using specific fields
Downloads
5
Maintainers
Readme
gatsby-plugin-slug-field
Create slugs from node data, using specific fields to generate a source string.
# Using default options, with source parameter set to 'title'
{
allPostsYaml {
edges {
node {
id # 1234
title # 'Blog Post Title'
content # ...
fields {
slug # blog-post-title
}
}
}
}
}
Install
$ npm install gatsby-plugin-slug-field
Configure
// gatsby-config.js
module.exports = {
plugins: [
{
resolve: 'gatsby-plugin-slug-field',
options: {
filter: { internal: { type: 'Yaml' } },
source: 'field-name',
fieldName: 'slug',
},
}
],
}
Options
filter
Default: true
. Type: Object
, function
or boolean
.
Determines which nodes will be processed. It can be set to an object for simple
matching (e.g.: { author: 'John Q.' }
) or a function, useful in complex cases.
The function will receive the current node as parameter (e.g.:
node => node.field ? true : false
) and must return true
if the node
should be processed or false
to ignore it. Set filter
to true
if every
node should be processed or false
to ignore all nodes.
source
Default: undefined
. Type: string
, Array
or function
.
Defines the fields used to generate the slug. If set to a string
or array
,
the matching fields will be used to generate the slug — if a field is null
or
undefined
, it will be included as an empty string. For complex cases, you can
use a function with this option. It will receive the current node as parameter
(e.g.: node => node.field + '-slug'
), and must return a string
that will be
processed by url-slug.
fieldName
Default: 'slug'
. Type: string
.
The field name to be used by createNodeField
, it will contain the generated
slug.
urlSlugOptions
Default: {}
. Type: Object
.
The options object to be passed to url-slug. More info about it can be found on url-slug documentation.
Usage
// gatsby-config.js
module.exports = {
plugins: [
{
resolve: 'gatsby-plugin-slug-field',
options: {
filter: { internal: { type: 'PostsYaml' } },
source: ['author', 'title', 'id'],
fieldName: 'postSlug',
urlSlugOptions: {
separator: '_'
}
},
}
],
}
# The options set above will enable the following query
{
allPostsYaml {
edges {
node {
id # 1234
title # 'Blog Post Title'
author # null
fields {
postSlug # blog_post_title_1234
}
}
}
}
}