Get_Pages仅显示父项而不显示子项

时间:2016-10-17 作者:GrampaRay

嘿,我正在尝试获取页面的所有直接子级。但我只得到了父母的两页。有什么想法吗?

Code:

function childpages_func( ){
    $args = array(
        \'child_of\' => $post->ID,
        \'parent\' => $post->ID,
        \'hierarchical\' => 0,
        \'sort_column\' => \'post_date\',
        \'sort_order\' => \'menu_order\'
    );
    $childpages = get_pages( $args );
        foreach($childpages as $child){
            $ret.= \'<a href="\'.get_page_link($child->ID).\'" title="\'.$child->post_title.\'">
                        <img src="\'.wp_get_attachment_url(get_post_thumbnail_id($child->ID)).\'" title="\'.$child->post_title.\'">
                    </a>\';
    }
    return $ret;
}

My pagestructure looks like this:

父母亲

父级2

子项1>应显示其子项(此处嵌入代码)

--儿童1a

--儿童2a

--儿童3a

儿童2

父级3

我只想显示“Child 1”(Child 1a、1b和1c…)的直接子级

但我的代码返回:

父级

父级2

就是这样。

非常感谢。

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

这里的问题有两个方面。

Firstly, 您正在使用\'parent\' => $post->ID,. $post 是一个全局变量,而不是超全局变量,因此您必须声明您打算使用它,然后才能使用:

global $post;
但是,与往常一样,使用API比使用原始数据更容易,您最好使用:

\'parent\' => get_the_ID(),
甚至更好的是,如果我们应用良好的编码实践,我们可以得到:

function display_child_pages( $post_id=0 ){
    ...
    \'parent\' => $post_id,

<?php display_child_pages( get_the_ID() ); ?>
现在,该函数清楚地声明了它的功能,并且可以输出任何页面的子页面,而不仅仅是我们当前所在的页面。由于post_id 论点

请注意,上面的函数应该响应,而不是返回HTML,否则最终会鼓励提前转义以及随之而来的所有安全问题。

Secondly, 您的查询正按照您的要求执行,但它比您的想法更加明确。

该查询要求所有具有父X的帖子,由于上述错误,在本例中父X为0。虽然子帖子没有父帖子,但它们有不同的父帖子!

要解决这个问题,您需要递归树,对每个链接运行一个查询以查找其子链接,并对每个子链接运行一个查询以查找其子链接。parent 只看parent, 它不会世代相传。

例如,“父2”不是“子1a”的父。“Child 1”是“Child 1a”的父母。这就是为什么查询没有提取它。

其他注意事项请勿使用get_pages, 使用WP_Query 取而代之,去掉中间人,速度会快一点,所有参数都一样,如果没有孩子会怎么样?没有检查是否get_pages 实际找到了您使用的任何页面get_post_thumbnail_id 但是你永远不会检查页面是否有特色图片,如果没有特色图片,就不可能单击链接,甚至看不到它\'child_of\' => $post->ID,? 没有child_of 参数,这看起来像是猜测。为什么要猜测一下,在下面的Codex上有所有受支持选项的完整列表WP_Query?

相关推荐

Taxonomy filter all children

我有一个自定义分类过滤器,它将过滤选定分类中的所有页面。我希望代码能够选择该分类法中的页面,以及千页的子页面。这是密码。add_action(\'restrict_manage_posts\', \'restrict_manage_posts_section\'); function restrict_manage_posts_section() { global $post_type; if ( is_object_in_taxonomy( $post_t