J'utilise le plugin Groupes d'utilisateurs qui me permet de regrouper des utilisateurs avec des catégories. Le plugin fonctionne essentiellement de la même manière que si vous utilisiez la méthode manuelle (taxonomies personnalisées des utilisateurs) décrite par Justin Tadlock ici .
Sur author.php, je souhaite répertorier les taxonomies auxquelles appartient l'utilisateur actuellement consulté, et chaque élément de la liste doit être lié à la page du terme taxonomie.
J'utilise le code suivant pour obtenir l'ID utilisateur actuel et récupérer les valeurs de champs personnalisés à partir de la page de profil:
<?php // Get current author
$curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) : get_userdata(intval($author));
?>
Et j'utilise le code suivant pour lister les taxonomies d'utilisateurs personnalisées:
<?php // List custom user taxonomies
wp_list_categories('taxonomy=user-group');
?>
"taxonomy = user-group" récupère tous les termes créés dans le plugin.
Voici un moyen pour obtenir les taxonomies postales actuelles, mais je souhaite le changer en taxonomies utilisateur personnalisées.
Y at-il un moyen pour moi de changer wp_list_categories () pour n’afficher que les taxonomies que je veux? Devrais-je chercher une autre approche?
Essayez cette suggestion:
$user_id = get_current_user_id(); // Get current user Id
$user_groups = wp_get_object_terms($user_id, 'user-group', array('fields' => 'all_with_object_id')); // Get user group detail
foreach($user_groups as $user_gro)
{
echo $user_gro->name; // Get current user group name
echo $user_gro->taxonomy; // get current user taxonomy
}
Ok, le problème est résolu. J'ai abandonné le plugin pour en obtenir un autre appelé User Taxonomies. Cela fait toute la partie ennuyeuse de la création de taxonomies personnalisées (sauvegarde des champs, etc.). Vous ferez aussi bien en écrivant tout vous-même, mais je voulais garder mon code propre.
Après l'installation du plugin, j'ai enregistré manuellement mes taxonomies personnalisées, comme décrit sur la page du plugin, mais j'ai ajouté hierarchy => true
pour que la taxonomie agisse comme une catégorie plutôt que comme une balise. Pour autoriser la sélection multiple sur la page de profil, j’ai ajouté ce code au plugin document user-taxonomies.php:
<input type="checkbox" name="<?php echo $key?>[]" id="<?php echo "{$key}-{$term->slug}"?>" value="<?php echo $term->slug?>" <?php checked(true, is_object_in_term($user->ID, $key, $term))?> />
Ensuite, j'ai dû changer la sauvegarde des champs avec cette fonction (ajoutée au même fichier:
/**
* Save the custom user taxonomies when saving a users profile
*
* @param Integer $user_id - The ID of the user to update
*/
public function save_profile($user_id) {
foreach(self::$taxonomies as $key => $taxonomy) {
// Check the current user can edit this user and assign terms for this taxonomy
if(!current_user_can('edit_user', $user_id) && current_user_can($taxonomy->cap->assign_terms)) return false;
// Save the data
$user_terms = ! is_array($_POST[$key]) ? array($_POST[$key]) : $_POST[$key];
wp_set_object_terms($user_id, $user_terms, $key, false);
clean_object_term_cache($user_id, $key);
}
}
Pour montrer les termes de taxonomie auxquels l'utilisateur appartient, j'ai utilisé l'extrait suivant:
<?php the_terms( $curauth->ID, 'NAME-OF-TAXONOMY');?></p>
J'espère que ça aide quelqu'un. Le crédit va à Timothy Wood et benjaminniess.