侧边栏中的 WordPress 动态页面树形菜单
我正在尝试根据当前活动的首页级别生成页面树子菜单列表。完整的页面树如下:
1.0.0首页项
- 1.1.0子页项
- 1.1.1 孙子页面项目
- 1.1.2 孙子页面项目
- 1.2.0 子页面项目
- 1.2.1 孙子页面项目
- 1.2.2 孙子页面项目
- 1.3.0 子页面项目
- 1.3.1 孙子页面项目
- 1.3.2 孙子页面项目
2.0.0 顶部页面项目
3.0.0 顶部页面项目
(第二和第三顶部页面项目具有类似的层次结构)
我希望我的 sidebar.php 中的页面树具有以下行为:
- 仅当前活动的首页及其所有子页面和所有页面 他们的孙子在浏览这个特定的首页时扩展了 分支
- 当前页面项目和当前父级突出显示。
- 其他首页项目被隐藏,
简而言之,这意味着在首页之间移动时整个侧边栏菜单会发生变化,但在每个首页到单页的分支/导航内保持不变。
此外,我想按菜单顺序显示页面项目。
有人有关于如何实现这一目标的代码片段和想法吗?
I'm trying to generate a page tree submenu list based on the currently active top page level. The comlete page tree is as follows:
1.0.0 top page item
- 1.1.0 child page item
- 1.1.1 grandchild page item
- 1.1.2 grandchild page item
- 1.2.0 child page item
- 1.2.1 grandchild page item
- 1.2.2 grandchild page item
- 1.3.0 child page item
- 1.3.1 grandchild page item
- 1.3.2 grandchild page item
2.0.0 top page item
3.0.0 top page item
(Second and third top page items have similar hierarchy)
I want the page tree in my sidebar.php with the following behaviour:
- Only the currently active top page with all its children and all
their grandchildren expanded when navigating this spesific top page
branch - Current page item and current parent highlighted.
- Other top page items are hidden
I short this means that the whole sidebar menu changes when moving between top pages but remains unchanged within the branch/navigation of a each top page down to single page.
Furthermore I'm like to display the page items by menu order.
Does anyone have a code snippet og thoughts on how to achieve this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
啊,我设法解决了。最初我无法弄清楚当前页面项目类去了哪里。它适用于单页级别,但不适用于父级或祖先级别。我必须在模板中包含侧边栏之前插入以下内容:
这消除了那个错误。
其次,我选择使用 css display:none; 隐藏所有页面项目。并且仅使用 display:block; 显示具有 current_page_item、current_page_parent 和 current_page_ancestor 类的页面项目。
最后但并非最不重要的一点是,这是获取侧边栏中页面列表的代码:
就是这样,就是这样!
完美运作!
然而,我不是 php 专家,所以如果有人能给我提供一种更优雅的方法,我会洗耳恭听!
Ah, I managed to solve it. Initially I couldn't figure out where the current page item class had gone. It worked at single page level but not at parent or ancestor level. I had to insert the following right before the sidebar inclusion in the template:
<?php wp_reset_query(); ?>
This flushed out that bug.
Secondly i chose to hide all page items with css display:none; and only show page items with the class current_page_item, current_page_parent and current_page_ancestor with display:block;.
Last but not least here's the code for getting the page list located in my sidebar:
<?php wp_list_pages('sort_column=menu_order'); ?>
That's it and that's that!
Works perfectly!
However, I'm no php guru so if anyone can present me with a more graceful approach I' all ears!