按类别过滤wordpress帖子-graphql和gatsby.js问题

时间:2019-05-14 08:20:19

标签: wordpress reactjs graphql gatsby

我想在我的gatsby.js页面上列出所有wordpress帖子,并在用户单击category-tab时按类别过滤它们。 选择类别后,我将其另存为“ 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>
)}

1 个答案:

答案 0 :(得分:0)

请澄清一下,这种方法行不通的原因是,盖茨比(Gatsby)无法生成一个基于运行时设置的变量来动态加载内容的站点。如果它确实接受了您编写的代码,则只能生成一个类别“ myCategory”。盖茨比没有这样做,只是拒绝了查询中的变量。

根据我的经验,有几种选择:

  1. 使用gatsby-node.js为每个类别生成一个页面。 https://www.gatsbyjs.org/tutorial/part-seven/

  2. 使用搜索插件。本质上,此选项是根据所有帖子生成一棵树,并将其放在搜索显示的页面上。

  3. 进行自己的搜索。这类似于#2。您必须引入所有帖子,为所有帖子制作组件,然后根据搜索组件的状态将它们设置为可见。