※予定投稿ではありません
初期段階だと下書きができないので、md ファイルはあるけど公開しないための下書き機能を追加します。プラグインは使いません。 作業手順のたびに、ローカルを再起動してください。
post に draft を追加する
まずは draft を追加します。boolean しか入れない予定。 (承認とか別のフローを使いたいときは、status とかにするといいのかも)
ここを変えたら一旦サーバを再起動します。
2020_09_19_draft.md
---
title: 'Gatsbyに下書きを投稿する'
published: '2020-09-19'
draft: false
tags: ['Gatsby', 'draft', '下書き']
---
クエリを追加する
allMarkdownRemark クエリを実行するすべてのページに次のフィルターを追加します。
...
allMarkdownRemark(
- sort: { fields: [frontmatter___date], order: DESC }
+ sort: { fields: [frontmatter___date], order: DESC },
+ filter: { frontmatter: { draft: { eq: false } } }
) {
...
gatsby-node.js のクエリを編集
development の時だけページにアクセスできればいいので、フィルタを以下のようにします。
`{
- allMarkdownRemark(sort: {fields: [frontmatter___date], order: DESC}, limit: 1000) {
+ allMarkdownRemark(
+ sort: {fields: [frontmatter___date], order: DESC},
+ ${
+ process.env.NODE_ENV === 'production' ?
+ 'filter: {frontmatter: {draft: {eq: false}}}' :
+ ''
+ }
+ limit: 1000
+ ) {
edges {
...
gatsby-config.js の RSS フィード部分を追加
RSS フィードの生成中に投稿の下書きをスキップするように追記します。
...
- `gatsby-plugin-feed`,
+ {
+ resolve: `gatsby-plugin-feed`,
+ options: {
+ feeds: [
+ {
+ query: `
+ {
+ allMarkdownRemark(
+ limit: 1000,
+ sort: {order: DESC, fields: [frontmatter___date]},
+ filter: {frontmatter: {draft: {eq: false}}}
+ ) {
+ edges {
+ node {
+ excerpt
+ html
+ fields {
+ slug
+ }
+ frontmatter {
+ title
+ date
+ }
+ }
+ }
+ }
+ }
+ `,
+ output: `rss.xml`
+ },
+ ]
+ }
+ },
…
これで、draft: true にした記事はビルド時にはスキップされ、開発時には利用できるようになります。
(記事一覧には開発時でも出てきません。表示したい場合はクエリを編集してください)
他にフィードを利用している場合は、そちらにもフィルタを適用するとよいです。
ほぼ参考サイトのままでした・・。