在Wordpress用户配置文件中对“联系信息”字段进行排序

I can add and remove fields in the user profile section with:

function add_remove_contactmethods($contactmethods ) {
    // Remove AIM
    unset($contactmethods['aim']);
    //add Phone
    $contactmethods['phone'] = 'Phone';
    return $contactmethods;
}

add_filter( 'user_contactmethods', 'add_remove_contactmethods' );

When I view this screen in the backend, the "Phone" field comes last, after some other fields like "Email" and "Website". I guess this is because my added field was added after the default Wordpress fields. How do I sort this, for instance alphabetically, so that my "Phone" field comes in alphabetical order instead of after the default fields? How do I sort the output of $contactmethods without messing it up?

try using ksort

    function add_remove_contactmethods($contactmethods ) {
       // Remove AIM
       unset($contactmethods['aim']);
       //add Phone
       $contactmethods['phone'] = 'Phone';
       ksort($contactmethods);
       return $contactmethods;
    }

    add_filter( 'user_contactmethods', 'add_remove_contactmethods' );

re UPDATE: So I guess the answer to my original question, is to explain why and how "Website" and "Email" are stored, and how the output is controlled in the backend when you view a profile. Maybe it's an ordered action? I guess "Website" and "Email" are just user meta, but how is the output order controlled. I accept that I might have to write a custom script to sort the output, I just don't know where to begin.

Your right about that, all the new contact fields were added into user_meta table. user_email and user_url are in the users table. The problem you are going to have doing this, is that a filter does not exist to modify the information. You can check the main filters here:

http://codex.wordpress.org/Plugin_API/Filter_Reference

and also you can look at core itself. All the admin templates are in wp-admin so you can look at the variable you need to modify in user-edit.php ($profileuser). Im in no way recommending this, but you could modify the template there, it will be overwritten on the next update of course so thats a drawback to it.

There may be a hook somewhere in admin in the load template process, if you could find one, you could relocate the template location to a theme file and recreate it with the changes you want. But all this seems like a lot of work to include just 2 fields to reorder?

Another approach is to use a higher priority the other when adding the fields. For example, Yoast adding 3 contact methods, and if you want your 'phone' appear before those, set the filter to:

add_filter('user_contactmethods', 'my_contactmethods', -5, 1);

Email and Website cant be re-ordered unless deep PHP coding or javascript re-order or advanced CSS.

if you know the key(s) (check the name fields in the source code), you can add other plugin fields by yourself, and choose exact appearance. A field is only added once if they added twice (!) This is how we use:

function entex_author_contactmethods($contactmethods){

    $contactmethods['mail'] = __('Public email', 'entex-theme');
    $contactmethods['phone'] = __('Phone', 'entex-theme');
    $contactmethods['googleplus'] = __('Google+', 'wordpress-seo');
    $contactmethods['youtube'] = __('YouTube URL', 'wordpress-seo');
    $contactmethods['facebook'] = __('Facebook profile URL', 'wordpress-seo');
    $contactmethods['instagram'] = __('Instagram URL', 'wordpress-seo');
    $contactmethods['twitter'] = __('Twitter username (without @)', 'wordpress-seo');
    $contactmethods['linkedin'] = __('LinkedIn URL', 'wordpress-seo');
    $contactmethods['myspace'] = __('MySpace URL', 'wordpress-seo');
    $contactmethods['pinterest'] = __('Pinterest URL', 'wordpress-seo');

    return $contactmethods;
}
add_filter('user_contactmethods', 'entex_author_contactmethods', -5, 1);

Happy contact-ing!