Add the following to your functions.php
for the on save. This will create a meta value on save that stores the length of the post title.
function save_crosses_title_length( $post_id ) {
$title = get_the_title($post_id);//get the title
$length = strlen( $title );// get the length of title
if ( get_post_meta( $post_id, 'name_length_crosses' ) ) {//if meta value exists
update_post_meta( $post_id, 'name_length_crosses', $length );//update meta value
return;
}
add_post_meta( $post_id, 'name_length_crosses', $length );//else create meta value
}
add_action( 'save_post_crosses', 'save_crosses_title_length');
For actually querying the posts.. Use the following. You can learn more about WP_Query here: https://codex.wordpress.org/Class_Reference/WP_Query
$args = array(
'post_type' => 'crosses',
'meta_key' => 'name_length_crosses',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
$custom_query = new WP_Query( $args );
while ( $custom_query->have_posts() ) :
$custom_query->the_post();
echo '<p>' . the_title() . '</p>';
endwhile;
If you like this approach I can build you a simple loop to run to update the existing posts.