You can use the sorting behavior of ordering the metaboxes.
add_meta_box( $id, $title, $callback, $post_type, $context,
$priority, $callback_args );
There are priorities ($priority
) to display. My Idea is to give all of them same priority but keep their id's in sorted manner.
For example: If I want *c_meta_box* to be displayed before *b_meta_box* then i will register my meta boxes something like this.
add_meta_box('a_c_meta_box','C META BOX','c_meta_box_cb','post','normal','default');
add_meta_box('b_b_meta_box','B META BOX','b_meta_box_cb','post','normal','default');
Notice: How i have changed the id's of the boxes and added a_ and b_ to sort them. You can add numbers too. Giving all of them same $priority
but sorted id's.
I know this is not the perfect solution but it works in this scenario.
For trouble shooting you can use this code to see look at the global $wp_meta_boxes
like this:
global $wp_meta_boxes;
echo "<pre>";
print_r($wp_meta_boxes);
echo "</pre>";
Further References: Widget API Codex
NOTE: After making changes on existing metaboxes hit Publish Button once to save the meta box's changed id's.