Ok it took me a while, but I think I have it. I had to use usort. I also included the code for the get_top_level_pages()
method.
$my_wp_query = new WP_Query();
$all_wp_pages = $my_wp_query->query(array('post_type' => 'page', 'posts_per_page' => '-1'));
$top_level_pages = get_page_by_title('Locations');
$menuArray = get_page_children( $top_level_pages->ID, $all_wp_pages );
function compareOrder($a, $b) {
return $a->menu_order - $b->menu_order;
}
usort($menuArray, 'compareOrder');
or, as I found out later I could just replace the last value in my array with:
public function create_custom_menu() {
$menuArray = $this->get_top_level_pages();
foreach ($menuArray as $key => $value) {
add_menu_page(
$value->post_title,
$value->post_title,
'manage_options',
$value->post_name.'-admin-page',
array( $this, 'create_admin_page'),
'dashicons-admin-home' ,
$value->page_attributes->menu-order
);
}
}
or even easier, I could have just added 'orderby'=>'menu_order'
to my query initially.