【发布时间】:2020-09-28 05:00:18
【问题描述】:
我正在尝试做一些我确信使用 wp_list_pages 应该非常简单的事情,但我无法让它可靠地工作。
我有一组页面都使用我创建的自定义页面模板lesson-plans-page.php。
我正在尝试在侧边栏中输出使用此模板的所有页面的分层(正确嵌套)菜单。
目前只有 5 页。 1 个父页面,4 个子页面
但是,只有在页面被排序以使父页面排在第一位时,它才分层工作...
wp_list_pages 不应该自动分层输出它们还是我遗漏了什么?
我首先创建了父页面,所以如果我按ID 排序,它就可以工作。
如果我不按任何排序,它会输出与父页面处于同一级别的所有 5 个页面。
我注意到它仍然知道父级有子级,因为它附加到 <li> 的类,但子级没有嵌套在父级下方的 <ul></ul> 中。
这是实际的页面结构和名称:
-Inclusive Learning Through Drama
--Early Stage 1
--Stage 1
--Stage 2
--Stage 3
我的代码就是这样(它有效,但只是因为 sort_column。
<ul>
<?php wp_list_pages( array(
'post_type' => 'page',
'meta_key' => '_wp_page_template',
'meta_value' => 'lesson-plans-page.php',
'hierarchical' => true,
'title_li' => '',
'sort_column' => 'ID',
'link_before' => '<button class="expand-children"></button>'
) ); ?>
</ul>
总的来说,它的输出是这样的,这就是我想要的
(为了简单起见,这里我删除了<a> 和<buttons> 标签)
<ul>
<li class="page_item_has_children">Inclusive Learning Through Drama
<ul class=children>
<li>Early Stage 1</li>
<li>Stage 1</li>
<li>Stage 2</li>
<li>Stage 3</li>
</ul>
</li>
</ul>
如果我删除 sort_column,它会像这样输出
<ul>
<li>Early Stage 1</li>
<li>Stage 1</li>
<li>Stage 2</li>
<li>Stage 3</li>
<li class="page_item_has_children">Inclusive Learning Through Drama</li>
</ul>
所以,我的问题是:如何让它输出正确嵌套的 html,而不添加一些基于已知因素(如 ID)的排序(如果我碰巧以不同的顺序创建它们,这将不起作用) ?
我尝试过的其他事情是在页面上使用 WP order 属性,但这不起作用,除非我在 1 处开始子页面上的订单并且在 0 处开始父页面,这与拥有父子关系的点背道而驰. (子页面顺序独立于父页面顺序)。
用户应该能够以任何顺序创建新页面并让它们自动添加到侧边栏菜单中。
【问题讨论】:
-
不幸的是,
wp_list_pages默认不是这样工作的。请参阅我链接到的问题中的答案,以了解如何做到这一点。另外仅供参考,hierarchical不是 wp_list_pages 的有效参数。有一个depth参数,但它的工作方式也与您在此处尝试的方式不同 - 它需要获得多少个子/孙子级别的值 -
@FluffyKitten 谢谢,我现在将查看该链接,但只是为了回应您对
hierarchical参数的评论,wp_list_pages()上的文档声明“有关其他参数,请参阅 get_pages()。”。hierarchical是get_pages()上的一个论点 - 这不是一个有效的论点吗? -
你说得对,对不起,我错过了 get_pages 中的
hierarchical参数。 -
@FluffyKitten 我没有看到链接的帖子有什么帮助。他们的问题/问题与在子页面上保持层次结构有关。他们正在使用与他们当前所在页面相关的
child_of属性,这是他们问题的核心。我的用例无论当前页面如何都获取相同的页面,因为它使用元键/值来获取它们。此外,它确实自动创建嵌套结果,只要查询以正确的顺序排列它们 - 肯定有一种方法可以按层次结构对它们进行排序......
标签: wordpress