我对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个最老的帖子正在显示,但是我本周创建的最新页面都没有。我已检查并仔细检查所有新旧页面在各方面都是相同的 - 相同的模板,相同的父页面,相同的创建者,相同的订单号,以及所有已发布的页面。任何人都知道我可能做错了什么?
答案 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 ) );
?>
答案 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函数参数。