显示多个页面的子项

时间:2018-04-04 作者:Adam Elovalis

我有一些代码可以显示单个页面的子级。我使用它在页脚中显示页面的子级。

$args = [
\'post_type\'=>\'page\', //this is the custom post type
\'child_of\'=> \'1452\',
];

// we get an array of posts objects
$posts = get_posts($args);

// start our string
$str = \'<ul>\';

// then we create an option for each post

foreach($posts as $key=>$post){
$str .= \'<li><a href=" \'.get_permalink($post).\' ">\'.$post->post_title.\'</a> 
</li>\';
}
$str .= \'</ul>\';

echo $str;
}
但是我想显示多个页面的子页面——当然,当我尝试使用多个代码实例时,它只显示第一个ID。

我试着把它变成一个函数,但我无法让它工作。这可能是一个非常愚蠢的问题,但我是一个小时间的PHP黑客。

编辑:我刚刚看到,它不仅从我指定的页面ID中提取子项,还从任何地方提取一些子项。非常奇怪。

2 个回复
最合适的回答,由SO网友:Mayeenul Islam 整理而成

这是一个工作代码。如果你把代码放在适当的地方,它肯定会起作用。您可以将其用作函数,甚至是短代码。

global $post;
$parent_id = $post->ID; //if you are within a loop

$childpages = new WP_Query([
                            \'post_type\'     => \'page\',
                            \'post_parent\'   => intval( $parent_id ),
                            \'posts_per_page\'=> 3, // your choice
                            \'orderby\'       => \'menu_order\', // your choice
                            \'post_status\'   => \'publish\'
                        ]);

if( $childpages->have_posts() ) :
    echo \'<ul>\';
        while( $childpages->have_posts() ) : $childpages->the_post();
            echo \'<li><a href="\'. esc_url(get_the_permalink()) .\'" rel="bookmark">\'. esc_html(get_the_title()) .\'</a></li>\';
        endwhile; wp_reset_postdata();
    echo \'</ul>\';
endif;
进一步阅读WP_Query() class — WordPress Developer Resources

SO网友:Abhik

您的代码有几个问题$args 应该是php数组。和post_parent 应使用参数,而不是child_of.

试试这个。。

$args = array(
    \'post_type\'=>\'page\',
    \'post_parent\' => 1452,
);

$posts = get_posts( $args );

if ( $posts ) {
    $str = \'<ul>\';

    foreach ($posts as $post ) {
        //Do your stuffs
    }

    $str .= \'</ul>\';
}
wp_reset_postdata();

结束