这个代码对我有用。它使用“位置”自定义分类法和“建议”javascript。You need to extend it to support multiple term selection.
将自定义字段添加到用户编辑屏幕,并在用户/管理员更新配置文件时存储元数据
// for account owner
add_action(\'show_user_profile\', \'add_custom_user_profile_fields\');
add_action(\'personal_options_update\', \'save_custom_user_profile_fields\');
// for admins
add_action(\'edit_user_profile\', \'add_custom_user_profile_fields\');
add_action(\'edit_user_profile_update\', \'save_custom_user_profile_fields\');
function add_custom_user_profile_fields($user) {
    printf(
    \'
<h3>%1$s</h3>
<table class="form-table">
<tr>
<th><label for="location">%2$s</label></th>
<td>
  <input type="text" name="location" id="location" value="%3$s" class="regular-text" />
  <br /><span class="description">%4$s</span>
</td>
</tr>
</table>
\',      __(\'Extra Profile Information\', \'locale\'),
        __(\'Location\', \'locale\'),
        esc_attr(get_user_meta($user->ID, \'location\', true)),
        __(\'Start typing location name.\', \'locale\')
    );
}
function save_custom_user_profile_fields($user_id) {
    if (!current_user_can(\'edit_user\', $user_id))
        return FALSE;
    $location_name = ( isset($_POST[\'location\']) ) ? $_POST[\'location\'] : \'\';
    // use your taxonomy name instead of \'locations\'
    $location = get_term_by(\'name\', $location_name, \'locations\');
    // human readable value and id
    update_user_meta($user_id, \'location\', $location_name);
    update_user_meta($user_id, \'location_id\', $location->term_id);
}
 Enqueue建议javascript仅用于用户编辑屏幕(假设您在自定义主题中使用此选项)
function admin_scripts($hook) {
    $screen = get_current_screen();
    if (\'user-edit\' == $screen->id) {
    wp_enqueue_script(
        \'user-edit-tag\',
        get_stylesheet_directory_uri() . \'/js/usermeta.js\',
        array(\'suggest\'),
        \'20140509\',
        true
    );
    }
}
 usermeta。js公司
jQuery(document).ready(function($) {
   // use \'tax=your_taxonomy_name\' instead of \'tax=locations\'
   $(\'#location\').suggest(ajaxurl+"?action=ajax-tag-search&tax=locations",{
        multiple:false,
        multipleSep: ","
    });
});