Mã này làm việc cho tôi. Nó sử dụng phân loại tùy chỉnh 'vị trí' và 'gợi ý' javascript. Bạn cần mở rộng nó để hỗ trợ nhiều lựa chọn hạn .
Thêm trường tùy chỉnh vào màn hình chỉnh sửa người dùng và lưu trữ siêu dữ liệu khi người dùng / quản trị viên cập nhật hồ sơ
// 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 đề xuất javascript chỉ cho màn hình chỉnh sửa người dùng (giả sử bạn sử dụng phần này trong chủ đề tùy chỉnh)
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: ","
});
});