Could you try this ? The idea is if there is a parent, we should list pages for the parent of this parent.
<?php if ( is_page() ) {
if($post->post_parent) {
$children = wp_list_pages('title_li=&child_of=". get_post( $post->post_parent )->post_parent ."&echo=0&sort_column=post_date&sort_order=DESC');
} else {
$children = wp_list_pages('title_li=&child_of=".$post->ID."&echo=0&sort_column=post_date&sort_order=DESC');
}
}
Other solution would be to try to use depth
option which according to codex could list only top-level pages :
<?php if ( is_page() ) {
if( $post->post_parent ) {
$children = wp_list_pages('title_li=&depth=1&echo=0&sort_column=post_date&sort_order=DESC');
} else {
$children = wp_list_pages('title_li=&child_of=".$post->ID."&echo=0&sort_column=post_date&sort_order=DESC');
}
}
Sorry, I don’t have time to try the code, but let us know if this is helps (or not).