【问题标题】:Filter wordpress posts by category - problem with graphql and gatsby.js按类别过滤 wordpress 帖子 - graphql 和 gatsby.js 的问题
【发布时间】:2019-10-01 05:10:25
【问题描述】:

我想在我的 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>
)}

【问题讨论】:

标签: wordpress reactjs graphql gatsby


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 2010-11-04
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    相关资源
    最近更新 更多