当已经在子页面上时循环遍历子页面

Loop through child pages when already on a child page

我有一个房产网站,父级是开发项目,子级是开发项目中的地块。

在开发页面上,我使用以下代码显示该开发的所有子页面(绘图页面)。

<?php
    $args = array(
        'post_type'      => 'property',
        'posts_per_page' => -1,
        'post_parent'    => $post->ID,
        'orderby'       => 'plot_number',
        'order'         => 'ASC'
     );     
    $parent = new WP_Query( $args );    
    if ( $parent->have_posts() ) :  
    ?>
        <?php while ( $parent->have_posts() ) : $parent->the_post(); ?>

        //CONTENT GOES HERE

        <?php endwhile; ?>
    <?php endif; wp_reset_query(); ?>

我想显示相同的内容(开发的所有子页面)但在子页面本身上。本质上我需要检查页面是否有父页面然后遍历子页面...

有什么想法吗?

您可以使用与上面完全相同的查询,只需稍作修改。在我继续之前请注意,如果您使用 WP_Query,您应该使用 wp_reset_postdata(),而不是 wp_reset_query()。后者与 query_posts 一起使用,在任何情况下你都应该 never 使用

要获取 post 父级,您可以使用 $post->post_parent。这将 return 当前页面父级的 ID。如果ID returns 0,则表示这是一个顶级页面。因此,您还需要在查询 运行 之前检查 $post->post_parent 是否不是 0,否则无论当前页面是否为顶级页面,您都会返回所有 post第

示例

<?php

global $post;

if( 0 != $post->post_parent ) {

    $args = array(
        'post_type'      => 'property',
        'posts_per_page' => -1,
        'post_parent'    => $post->post_parent,
        'orderby'       => 'plot_number',
        'order'         => 'ASC'
     );     
    $parent = new WP_Query( $args );    
    if ( $parent->have_posts() ) :  
    ?>
        <?php while ( $parent->have_posts() ) : $parent->the_post(); ?>

        //CONTENT GOES HERE

        <?php endwhile; ?>
    <?php wp_reset_postdata(); endif; 

} 
?>

只是我现在学到的另一件事,你应该在 endif 之前但在 endwhile

之后使用 wp_reset_postdata()