get_pages(array(' child_of' => $ post-> ID)未显示所有子项

时间:2017-02-13 17:27:39

标签: wordpress

我对wordpress很陌生,想知道是否有人可以对这段代码有所了解。 我想在他们的父页面上列出所有子页面,这里是一些带有一些html的代码:

<?php
$mypages = get_pages( array( 'child_of' => $post->ID ) );

foreach( $mypages as $page ) {      
    $content = $page->post_content;
    if ( ! $content ) // Check for empty page
        continue;

    $content = apply_filters( 'the_content', $content );
?>

<p style="color: white; text-transform: uppercase;"><?php echo $page->post_title; ?></p>

<?php
   }   
?>

代码有效,并显示正确的子页面 - 但不是全部。这7个最老的帖子正在显示,但是我本周创建的最新页面都没有。我已检查并仔细检查所有新旧页面在各方面都是相同的 - 相同的模板,相同的父页面,相同的创建者,相同的订单号,以及所有已发布的页面。任何人都知道我可能做错了什么?

4 个答案:

答案 0 :(得分:1)

尝试以下代码:

$args = array('child_of' => $post->ID,'sort_order' => 'desc',
'sort_column' => 'ID',
);

答案 1 :(得分:0)

尝试使用parent而不是child_of并将hierarchy设置为false。根据文档显示,true的默认层次结构值可以影响结果。

<?php
    $mypages = get_pages( array( 'parent' => $post->ID,  'hierarchical' => 0  ) );
?>

参考:https://codex.wordpress.org/Function_Reference/get_pages

答案 2 :(得分:0)

我认为您还需要额外的参数来获得您正在寻找的结果。

$args = array( 
        'child_of' => $post->ID, 
        'parent ' => $post->ID,
        'hierarchical' => 0,
        'sort_column' => 'menu_order', 
        'sort_order' => 'asc'
);
$mypages = get_pages( $args );

您可以检查wordpress Doc的参数并返回输出。

注意如果您想按日期对页面进行排序,则可以使用'sort_column' => 'menu_order',更改'sort_column' => 'post_date',

还有其他方法可以实现相同的目标,我更喜欢以下方式。

<?php

$args = array(
    'post_type'      => 'page',
    'posts_per_page' => -1,
    'post_parent'    => $post->ID,
    'order'          => 'ASC',
    'orderby'        => 'menu_order'
 );

$mypages = new WP_Query( $args );


if ( $mypages->have_posts() ) : ?>

    <?php while ( $mypages->have_posts() ) : $mypages->the_post(); ?>

        <p style="color: white; text-transform: uppercase;"><?php the_title(); ?></p>

    <?php endwhile; ?>

<?php endif; wp_reset_query(); ?>

您还可以使用wp_list_pages呈现直接HTML。

答案 3 :(得分:0)

我已经解决了这个问题,但实际上我不知道为什么会这样。任何关于为什么这样做的评论都会很棒。

从原始代码中,我删除了“if(!$ content)”部分,它们都显示出来 - 即使所有页面都有相同数量的内容。

所以,最后,我的代码是:

<?php
$mypages = get_pages( array( 'child_of' => $post->ID ) );

foreach( $mypages as $page ) {      
$content = $page->post_content;
$content = apply_filters( 'the_content', $content );
?>

<p style="color: white; text-transform: uppercase;"><?php echo $page->post_title; ?></p>

<?php
}   
?>

我根本不必更改get_pages函数参数。