这个代码对我有用。它使用“位置”自定义分类法和“建议”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: ","
});
});