我试图在 wordpress 中列出所有父页面。更具体地说,一个祖先页面列表,用作面包屑路径。
我想得到父母,它的父母等等。一直到顶层。
例如,对于这个页面结构:
- 页
- 子页面
- 子页面
- 子子页面
- 子页面
- 子页面
从子子页面调用它应该返回
- 页
- 子页面
- 子页面
并从子页面调用它应该返回
- 页
- 子页面
get_post_ancestors() 将所有祖先的页面 id 作为数组返回。
wp_list_pages() 接受以逗号分隔的页面 ID 列表
implode() 函数将数组与字符串粘合在一起,在本例中为逗号。
通过用逗号分解 get_post_ancestors 的结果,它有效地创建了一个以逗号分隔的祖先页面 id 列表以传递给 wp_list_pages()。
wp_list_pages() 的默认用法将创建嵌套列表。将深度选项设置为 -1 会将所有项目排列在一个平面列表中。
最后重要的一点,if 语句在列出父页面之前检查以确保帖子实际上有父页面。如果没有父母,并且 get_post_ancestors() 被调用,它会出于某种原因返回 WP 站点上的所有页面。
把这一切放在一起,
<ul>
<?php
$ancestorsCSV = implode( ',' , get_post_ancestors( $post));
if ($post->post_parent){
wp_list_pages('include='.$ancestorsCSV.'&title_li=&depth=-1' );
}
?>
</ul>
令人惊讶的是,我无法通过谷歌搜索找到这样的解决方案。