wordpress - 按类别过滤 wordpress 帖子 - graphql 和 gatsby.js 的问题
问题描述
我想在我的 gatsby.js 页面上列出所有 wordpress 帖子,并在用户单击类别选项卡时按类别过滤它们。选择类别后,我将其保存为“choosenCategory”变量,它是一个字符串。我在寻找将变量传递给我的查询的方法时遇到问题,但这种方法不起作用:
const chosenCategory = "myCategory";
const PostListingData = (props) => (
<StaticQuery
query={graphql`
query($name: String = chosenCategory) {
allWordpressPost(filter:
{ categories:
{ elemMatch:
{ name:
{ eq:
$name
}
}
}
}
)
{
edges {
node {
id
title
categories {
name
}
}
}
}
}
`}
render={data => <PostsListing data={data} {...props} />}
/>
)
const PostsListing = ({ data }) => {
return (
<div>
{data.allWordpressPost.edges.map(({ node }, i) => (
*** some code ***
))}
</div>
)}
解决方案
澄清一下,这不起作用的原因是 Gatsby 无法生成一个基于运行时设置的变量动态加载内容的站点。如果它确实接受了您编写的代码,它将只能生成一个类别“myCategory”。Gatsby 没有这样做,而是拒绝了查询中的变量。
根据我的经验,有几个选择:
使用 gatsby-node.js 为每个类别生成一个页面。https://www.gatsbyjs.org/tutorial/part-seven/
使用搜索插件。本质上,此选项是根据所有帖子生成树并将其放在搜索显示的页面上。
进行自己的搜索。这类似于#2。您必须引入所有帖子,为所有帖子制作组件,然后根据搜索组件的状态将它们设置为可见。
推荐阅读
- reactjs - React - 使用状态动态添加输入标签
- ios - 我的 GMSMarker 显示在左上角,我想在中心 Objective-c 上显示它
- python - NoReverseMatch at / Reverse for 'course_detail' 没有找到参数 '('',)'。尝试了 1 种模式:['course/(?P
[-a-zA-Z0-9_]+)/$'] - python - 为什么在它自己的构造函数中调用 super.__init__() 并且这是某种类型的递归?
- apache-kafka - Kafka Mirrormaker 和记录编码
- javascript - 如何在 Promise 函数中抛出不同的错误?
- keras - 使用 Keras 和 TF2.0 的 Eager vs 图形模式
- html - 如何启用按音节自动断字?
- speech-recognition - 如何在 Mozilla DeepSpeech 中将成绩单保存到文本文件中?
- node.js - 使用 set 仅更新 Firestore 事务中的一部分写入属性