Je montre une liste d'utilisateurs comme suit:
<ul>
<?php $directors = get_users('role=director');
foreach ($directors as $director) {
$dir_id = $director->ID;
$dir_order = get_user_meta($dir_id, 'exit_director_order', TRUE);
$dir_link = get_bloginfo('home').'/?author='.$dir_id;
if ($dir_id == $director_id ) {
$dir_class= 'current director-'.$dir_id;
} else {
$dir_class= 'director-'.$dir_id;
}
?>
<li>
<a href="<?php print $dir_link; ?>" class="<?php print $dir_class; ?>"><?php echo $director->display_name; ?></a><br>
</li>
<?php } ?>
</ul>
Je voudrais commander les utilisateurs par dir_order (dans l'ordre du plus petit nombre au plus grand). Ces valeurs sont stockées dans la base de données sous forme d'entiers.
Comment pourrais-je m'y prendre?
EDIT:
Voici la solution. Commentaires inclus:
<?php $results = get_users('role=director');
foreach ($results as $result) {
// Get data about each user as an object
$user = get_userdata($result->ID);
// Create a flat array with only the fields we need
$directors[$user->ID] = array(
'dir_order' => $user->exit_director_order,
'dir_id' => $user->ID,
'dir_name' => $user->first_name.' '.$user->last_name
);
}
// Sort
sort($directors);
// The list
echo '<ul id="rightcolumndirector">';
// For each result
foreach ($directors as $director) {
// Set up the variables
$dir_id = $director['dir_id'];
$dir_order = $director['dir_order'];
$dir_name = $director['dir_name'];
$dir_link = get_bloginfo('home').'/?author='.$director['dir_id'];
// The list items
echo '<li>';
echo '<a href="'.$dir_link.'" id="dir-id-'.$dir_id.'">'.$dir_name.'</a>';
echo '</li>';
}
echo '</ul>';
?>
Voici la solution. Commentaires inclus:
<?php $results = get_users('role=director');
foreach ($results as $result) {
// Get data about each user as an object
$user = get_userdata($result->ID);
// Create a flat array with only the fields we need
$directors[$user->ID] = array(
'dir_order' => $user->exit_director_order,
'dir_id' => $user->ID,
'dir_name' => $user->first_name.' '.$user->last_name
);
}
// Sort
sort($directors);
// The list
echo '<ul id="rightcolumndirector">';
// For each result
foreach ($directors as $director) {
// Set up the variables
$dir_id = $director['dir_id'];
$dir_order = $director['dir_order'];
$dir_name = $director['dir_name'];
$dir_link = get_bloginfo('home').'/?author='.$director['dir_id'];
// The list items
echo '<li>';
echo '<a href="'.$dir_link.'" id="dir-id-'.$dir_id.'">'.$dir_name.'</a>';
echo '</li>';
}
echo '</ul>';
?>
Pour obtenir tous les utilisateurs commandés par un champ méta personnalisé, définissez meta_key
et orderby meta_value
ou meta_value_num
dans ce cas.
$results = get_users( array(
'role' => 'director',
'meta_key' => 'exit_director_order',
'orderby' => 'meta_value_num',
'order' => 'ASC'
) );
EDIT: Cela a semblé fonctionner et DEVRAIT fonctionner. Je crois que cela fonctionnera dans la prochaine version. Mais pour l'instant, ça ne marche pas.
La réponse choisie ici est la meilleure option que j'ai trouvée jusqu'à ce moment-là: Commande des utilisateurs d'un rôle spécifique par nom de famille