在Gatsby JS中获取WordPress子菜单

时间:2018-04-28 07:27:25

标签: wordpress-rest-api gatsby

我正在使用WP作为后端摆弄Gatsby JS,到目前为止一直很好。现在我试图拉出主菜单项的菜单,正如预期的那样。我能够真正理解的是如何让子菜单进入。

我找到的唯一相关内容是https://github.com/gatsbyjs/gatsby/issues/2426,如果我记录数据,它会给我子菜单。只是不能将它们拉进菜单。

这是我在layouts / index.js中的查询:

export const query = graphql`
  query LayoutQuery {
    allWordpressWpApiMenusMenusItems {
      edges {
        node {
          name
          count
          items {
            order
            title
            url
            wordpress_children {
              wordpress_id
              title
              url
            }
          }
        }
      }
    }
}
`

这是我的菜单组件:

class MainMenu extends Component {
  render(){

    const data = this.props.menu.allWordpressWpApiMenusMenusItems.edges["0"].node.items
    console.log(data)

    return(
      <div>
      <h1>Menu</h1>
      <ul>
        {data.map((item) =>
          <li key={item.object_slug}>
            <Link to={item.url}>
              {item.title}
            </Link>
          </li>
        )}
      </ul>
      </div>
    )
  }
}

export default MainMenu

我试图摆弄

的各种变化
{item.children["0"].wordpress_children.title}

但是无法让它发挥作用:/任何想法或指示都会非常感激!

1 个答案:

答案 0 :(得分:3)

我刚测试了这个,你的逻辑声音就是你需要的另一个循环来显示子项目。所以在你的MainMenu.js中你可以这样做:

class MainMenu extends Component {
render() {

    const data = this.props.menu.allWordpressWpApiMenusMenusItems.edges[0].node.items
    console.log(data)
    return (
        <div>
            <h1>Main Menu</h1>
            <ul>
                {data.map((item) =>
                    <li key={item.object_slug}>
                        <Link to={item.url}>
                            {item.title}
                        </Link>
                        <ul>
                            {item.wordpress_children && item.wordpress_children.map((subitem) =>
                                <li key={item.wordpress_id}>
                                    <Link to={subitem.url}>
                                        {subitem.title}
                                    </Link>
                                </li>
                            )}
                        </ul>
                    </li>
                )}
            </ul>
        </div>
    )
}
}

这一行非常重要{item.wordpress_children && item.wordpress_children.map((subitem)

这将检查您的菜单项是否包含子项,如果是,它将映射它们并迭代它们。

我希望这适合你,我测试它并且它有效。