据我所知WP_Post::$ancestors
动态创建。因此,如果您试图在它不存在时访问它,PHP会调用magic method __get
on that object 并尝试获取该属性的值。
由于该属性是通过DINAMICAL创建的,因此不能像在此行中那样对其进行修改(end()
函数修改数组的内部指针位置):
end($post->ancestors);
如果
__get
方法通过引用返回,但您不能修改核心代码(而且我不确定在WP\\u Post::\\u get中通过引用返回是否被批准),因此您应该尝试使用Post祖先修改您自己的变量:
if(!$post->post_parent){
$children = wp_list_pages(array(
\'sort_column\' => \'menu_order\',
\'title_li\' => \'\',
\'echo\' => 1,
\'walker\' => new Sidebar_Custom_Walker()
));
}else{
$ancestors = $post->ancestors;
// Using get_post_ancestors() should work as well
// $ancestors = get_post_ancestors();
if( !empty( $ancestors ) )
{
$ancestors = end($ancestors);
$children = wp_list_pages(array(
\'sort_column\' => \'menu_order\',
\'title_li\' => \'\',
\'echo\' => 1,
\'child_of\'=>$ancestors,
\'walker\' => new Sidebar_Custom_Walker()
));
}
}