Wordpress使用foreach循环列出子页面上的子页面

时间:2016-02-24 09:11:14

标签: php wordpress loops foreach

我使用foreach循环列出父页面上的子页面,效果很好。但是,子页面不会在子页面上列出,这是我喜欢的。

到目前为止,对于父页面有效:

<?php

$nav = array(
    'post_type' => 'page',
    'orderby' => 'title',
    'order' => 'ASC',
    'post_parent' => $post->ID
);

$child_pages = get_posts($nav);

?>
<ul>
    <?php foreach ($child_pages as $child_page) : ?>
        <li>
            <a href="<?=get_permalink($child_page->ID); ?>"><?=$child_page->post_title; ?></a>
        </li>
    <?php endforeach; ?>
</ul>

理想情况下,我希望继续使用foreach而不是任何其他循环。我想知道是否需要在现有循环中添加另一个循环,但我不确定如何继续。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

使用parent而不是post_parent

    <?php

    $nav = array(
        'post_type' => 'page',
        'orderby' => 'title',
        'order' => 'ASC',
        'child_of' => $post->ID
    );

    $child_pages = get_posts($nav);

    ?>
    <ul>
        <?php foreach ($child_pages as $child_page) : ?>
            <li>
                <a href="<?=get_permalink($child_page->ID); ?>"><?=$child_page->post_title; ?></a>
            </li>
        <?php endforeach; ?>
    </ul>

希望有所帮助

答案 1 :(得分:1)

你可以在这里做的是使用 wp_get_post_parent_id 检查当前页面是否是子页面 - 请参阅http://codex.wordpress.org/Function_Reference/wp_get_post_parent_id然后如果页面是子页面 - 请使用父ID,否则只使用帖子ID。这样的事情应该有效:

global $post;
if(wp_get_post_parent_id( $post->ID ))
{
    $nav = array(
        'post_type' => 'page',
        'orderby' => 'title',
        'order' => 'ASC',
        'post_parent' => wp_get_post_parent_id( $post->ID )
    );
}
else{
    $nav = array(
    'post_type' => 'page',
    'orderby' => 'title',
    'order' => 'ASC',
    'post_parent' => $post->ID
    );
}
$child_pages = get_posts($nav);