Je veux créer un index utilisateur Wordpress (assez grand) avec les utilisateurs classés par ordre alphabétique, comme ceci:PHP/SQL/Wordpress: Groupe une liste d'utilisateurs par ordre alphabétique
A
- Amy
- Adam
B
- Bernard
- Bianca
et ainsi de suite.
J'ai créé une requête Wordpress personnalisée qui fonctionne correctement, sauf pour un problème: Elle affiche également des lettres "vides", des lettres où il n'y a aucun utilisateur dont le nom commence par cette lettre. Je serais heureux si vous pouviez m'aider à corriger ce code afin qu'il affiche seulement la lettre s'il y a en fait un utilisateur avec un nom de cette lettre :) J'ai tenté ma chance en vérifiant combien de résultats il y a pour cette lettre, mais de toute façon ça ne marche pas.
(FYI, j'utilise le plugin photo utilisateur et je veux seulement montrer aux utilisateurs de la liste qui ont une image approuvée, d'où le contenu de la requête SQL).
<?php
$alphabet = range('A', 'Z');
foreach ($alphabet as $letter) {
$user_count = $wpdb->get_results("SELECT COUNT(*) FROM wp_users WHERE display_name LIKE '".$letter."%' ORDER BY display_name ASC");
if ($user_count > 0) {
$user_row = $wpdb->get_results("SELECT wp_users.user_login, wp_users.display_name
FROM wp_users, wp_usermeta
WHERE wp_users.display_name LIKE '".$letter."%'
AND wp_usermeta.meta_key = 'userphoto_approvalstatus'
AND wp_usermeta.meta_value = '2'
AND wp_usermeta.user_id = wp_users.ID
ORDER BY wp_users.display_name ASC");
echo '<li class="letter">'.$letter.'';
echo '<ul>';
foreach ($user_row as $user) {
echo '<li><a href="/author/'.$user->user_login.'">'.$user->display_name.'</a></li>';
}
echo '</ul></li>';
}
}
?>
Merci d'avance!
Mise à jour:
J'édité le SQL dans, mais maintenant j'ai le problème qu'il recrache un </ul>
avant la première li, qui se visse la mise en page, comme ceci:
</ul>
</li>
<li class="letter">
<div class="letter_head">A</div>
<ul>
<li>Abigail</li>
</ul>
</li>
<li class="letter">
<div class="letter_head">B</div>
<ul>
<li>Bernard</li>
<li>Bianca</li>
</li>
</ul>
En général, il est plutôt difficile de savoir où se trouvent les ul et li. Comment puis-je le réparer?
<?php
$qry = "SELECT DISTINCT wp_users.user_login, wp_users.display_name,
LEFT(UPPER(wp_users.display_name), 1) AS first_char
FROM wp_users, wp_usermeta
WHERE UPPER(wp_users.display_name) BETWEEN 'A' AND 'Z'
OR wp_users.display_name BETWEEN '0' AND '9'
AND wp_usermeta.meta_key = 'userphoto_approvalstatus'
AND wp_usermeta.meta_value = '2'
AND wp_usermeta.user_id = wp_users.ID
ORDER BY wp_users.display_name ASC";
$result = mysql_query($qry);
$current_char = '';
while ($row = mysql_fetch_assoc($result)) {
if (!isset($current_char)) {
echo '<li class="letter"><div class="letter_head">'.$current_char.'</div>';
echo '<ul>';
} elseif ($row['first_char'] != $current_char) {
echo '</ul>';
$current_char = $row['first_char'];
echo '<li class="letter"><div class="letter_head">'.$current_char.'</div>';
echo '<ul>';
}
echo '<li><a href="/member/'.$row['user_login'].'">'.$row['display_name'].'</a></li>';
}
?>
Cela semble être une bonne idée. Comment ça marche? (Je sais comment faire quelque chose comme ça pour les dates, mais je n'ai aucune idée de comment le faire dans ce cas). – rayne