我在我的Wordpress主题中,我正在获取子页面以显示其信息。这就是我现在所拥有的:
<?php
$my_wp_query = new WP_Query();
$all_wp_pages = $my_wp_query->query(array('post_type' => 'page'));
$staff = get_page_children(8, $all_wp_pages);
foreach($staff as $s){
$page = $s->ID;
$page_data = get_page($page);
$content = $page_data->post_content;
$content = apply_filters('the_content',$content);
$content = str_replace(']]>', ']]>', $content);
echo '<div class="row-fluid"><span class="span4">';
echo get_the_post_thumbnail( $page );
echo '</span><span class="span8">'.$content.'</span></div>';
}
?>
我有五个应该出现的子页面,但只有三个正在返回。我在$ staff上使用print_r来查看其他页面是否在数组中,但它们不是。我不确定问题是什么。
答案 0 :(得分:24)
get_page_children()
或new WP_Query()
没有错。默认情况下,WP_Query
仅返回创建的最后x
个页面。这是对WP_Query
施加的限制。
get_page_children()
只需获取WP_Query
返回的pages数组,并过滤该列表中的子页面。根据WordPress Codex:get_page_children“...不会进行任何SQL查询来获取孩子。”
$query = new WP_Query( 'posts_per_page=-1' );
<?php
$my_wp_query = new WP_Query();
$all_wp_pages = $my_wp_query->query(array('post_type' => 'page', 'posts_per_page' => -1));
$staff = get_page_children(8, $all_wp_pages);
foreach($staff as $s){
$page = $s->ID;
$page_data = get_page($page);
$content = $page_data->post_content;
$content = apply_filters('the_content',$content);
$content = str_replace(']]>', ']]>', $content);
echo '<div class="row-fluid"><span class="span4">';
echo get_the_post_thumbnail( $page );
echo '</span><span class="span8">'.$content.'</span></div>';
}
?>
function my_get_page_children( $page_id, $post_type = 'page' ) {
// Set up the objects needed
$custom_wp_query = new WP_Query();
$all_wp_pages = $custom_wp_query->query( array( 'post_type' => $post_type, 'posts_per_page' => -1 ) );
// Filter through all pages and find specified page's children
$page_children = get_page_children( $page_id, $all_wp_pages );
return $page_children;
}
使用辅助函数
进行编码 foreach(my_get_page_children(8) as $s){
$page = $s->ID;
$page_data = get_page($page);
$content = $page_data->post_content;
$content = apply_filters('the_content',$content);
$content = str_replace(']]>', ']]>', $content);
echo '<div class="row-fluid"><span class="span4">';
echo get_the_post_thumbnail( $page );
echo '</span><span class="span8">'.$content.'</span></div>';
}
答案 1 :(得分:3)
我有一个类似的问题 - 看起来像get_page_children表现得很奇怪...(在我的情况下,一个页面有三个孩子它返回三个,另一个有四个它返回零! - 无法解决它..)
我通过使用自定义查询来解决它:
$params = array(
'post_type'=>'page',
'post_parent'=> 8,
);
$staff = query_posts($params);
此处类似:http://www.sanraul.com/2010/08/28/get-page-children/
注意:根据您使用此处的位置,您可能还需要wp_reset_query();
- 否则query_posts()
可能会破坏您的主循环!
希望有所帮助! - A
答案 2 :(得分:0)
$curID = get_the_ID();
query_posts(
array(
'post_type'=>'page',
'post_parent'=>$curID,
'orderby' => 'menu_order',
'order' => 'ASC'
)
);
echo '<ul>';
while ( have_posts() ) : the_post();
echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
endwhile;
echo '</ul>';
wp_reset_query();
答案 3 :(得分:0)
见以下编辑
刚刚经历并解决了这个问题后,我想我会分享我必须采取的方法。
最初,我使用新的WP_Query来获取所有页面,然后将查询结果提供给get_page_children():
$all_pages = new WP_Query( array( 'post_type' => 'page' ) );
wp_reset_postdata();
$page_id = get_the_ID();
// pass $all_pages as the second parameter
$page_children = get_page_children( $page_id, $all_pages );
foreach ( $page_children as $childObj ) {
echo '<a href="' . $childObj->guid . '">' . $childObj->post_title . '</a>'
}
无论出于何种原因,上述代码对我都不起作用。
相反,我将$ all_pages的'posts'对象作为第二个参数传递,如下所示:
$all_pages = new WP_Query( array( 'post_type' => 'page' ) );
wp_reset_postdata();
$page_id = get_the_ID();
// pass the posts object of $all_pages as the second parameter
$page_children = get_page_children( $page_id, $all_pages->posts );
foreach ( $page_children as $childObj ) {
echo '<a href="' . $childObj->guid . '">' . $childObj->post_title . '</a>';
}
我希望这有助于某人!
修改强> 在使用get_page_children()函数遇到更多麻烦之后,我选择了一个完全不同的路径,它一直在努力实现相同的最终结果:
$page = get_queried_object();
$children = get_pages( 'child_of=' . $page->ID . '&parents=' . $page->ID );
// loop through the child page links
foreach ( $children as $child ) {
echo '<a href="' . get_permalink( $child->ID ) . '">' . get_the_title( $child->ID ) . '</a>';
}
答案 4 :(得分:0)
您可以简单地使用
$args = array(
'post_parent' => $parent_id ,
'post_type' => 'page',
'numberposts' => -1,
'post_status' => 'publish'
);
$children = get_children( $args );
$ children变量将为您提供父ID的所有子页面。如果您使用的是WP_Query,请确保在代码后重设查询以获取更多信息 https://developer.wordpress.org/reference/functions/get_page_children/
在您的functions.php文件中使用此代码,并使用父页面ID调用函数
function load_clildren( $parent_id=null ){
$parent_id = ( $parent_id ) ? $parent_id : $post->ID;
$args = array(
'post_parent' => $parent_id ,
'post_type' => 'page',
'numberposts' => -1,
'post_status' => 'publish'
);
$children = get_children( $args );
return $children;
}
函数调用方法
$ch_pages = load_clildren( $parent_id );
或 在父页面中使用
$ch_pages = load_clildren();