-
Notifications
You must be signed in to change notification settings - Fork 7
/
gatsby-node.js
64 lines (62 loc) · 1.85 KB
/
gatsby-node.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
const _ = require('lodash');
const Promise = require('bluebird');
const path = require('path');
const slash = require('slash');
// Implement the Gatsby API “createPages”. This is
// called after the Gatsby bootstrap is finished so you have
// access to any information necessary to programmatically
// create pages.
// Will create pages for Wordpress pages (route : /{slug})
// Will create pages for Wordpress posts (route : /post/{slug})
exports.createPages = ({
graphql,
actions,
}) => {
const {
createPage,
} = actions;
return new Promise((resolve, reject) => {
// The “graphql” function allows us to run arbitrary
// queries against the local Wordpress graphql schema. Think of
// it like the site has a built-in database constructed
// from the fetched data that you can run queries against.
// ==== POSTS (WORDPRESS NATIVE AND ACF) ====
graphql(
`
{
allWordpressPost {
edges {
node {
id
slug
status
template
format
}
}
}
}
`,
).then((result) => {
if (result.errors) {
console.log(result.errors);
reject(result.errors);
}
const postTemplate = path.resolve('./src/templates/post.js');
// We want to create a detailed page for each
// post node. We'll just use the Wordpress Slug for the slug.
// The Post ID is prefixed with 'POST_'
_.each(result.data.allWordpressPost.edges, (edge) => {
createPage({
path: `/blog/${edge.node.slug}`,
component: slash(postTemplate),
context: {
id: edge.node.id,
},
});
});
resolve();
});
// ==== END POSTS ====
});
};