J'ai configuré mes profils utilisateur pour autoriser les taxonomies personnalisées après ce didacticiel .
Idéalement, j'aimerais utiliser la méta-boîte Tag par défaut à partir de l'écran Post afin que les utilisateurs puissent facilement ajouter de nouveaux termes et en rechercher les plus utilisés. J'utilise actuellement une liste de cases à cocher, mais cela pourrait être très long car nous aurons un certain nombre de taxonomies. Puis-je en quelque sorte utiliser la post_tags_meta_box()
? J'ai regardé dans add_meta_box()
mais cela ne marche pas avec 'user'
.
Malheureusement, je dirais que la réponse est non.
Vous pouvez pirater (copier + coller) le code de post_categories_meta_box()
et essayer de l'adapter à l'utilisateur, mais vous passeriez plus de temps à essayer de reconnecter tous les éléments. Je suis à peu près sûr que les méta-boîtes post utilisent ajax pour enregistrer et ajouter de nouveaux termes. Vous devez donc détourner du code javascript et le modifier également.
Je pense que votre meilleur pari est de continuer sur la voie que vous suivez. Vous pouvez ajouter une propriété overflow:scroll;
css à votre conteneur de cases à cocher afin qu'elle ne soit pas trop longue.
J'ai inversé l'ingénierie des boîtes à méta de poste pour le front-end il y a quelques mois, et ce n'était pas trop difficile. Je ne suggérerais cependant pas d'essayer de réutiliser les fonctions de balisage et php du noyau. Au lieu de cela, utilisez-les comme guide si vous êtes bloqué.
Brève réponse pour ne décrire que ce qui doit être fait:
wp_enqueue_script( 'posts' );
(ou quel que soit le nom de ce descripteur de script).Ce code fonctionne pour moi. Il utilise la taxonomie personnalisée 'locations' et le javascript 'suggérer'. Vous devez l’étendre pour prendre en charge la sélection de plusieurs termes .
Ajouter un champ personnalisé à l'écran de modification de l'utilisateur et stocker des métadonnées lorsque l'utilisateur/admin met à jour le profil
// 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 suggère javascript pour l'écran d'édition utilisateur uniquement (en supposant que vous l'utilisiez dans un thème personnalisé)
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: ","
});
});