gpt4 book ai didi

PHP/SQL/WordPress : Group a user list by alphabet

转载 作者:行者123 更新时间:2023-11-29 01:01:51 25 4
gpt4 key购买 nike

我想创建一个(相当大的)Wordpress 用户索引,用户按字母顺序分类,如下所示:

一个

  • 艾米
  • 亚当

B

  • 伯纳德
  • 比安卡

等等。

我已经创建了一个自定义的 Wordpress 查询,它可以很好地解决这个问题,除了一个问题:它还会显示“空”字母,即没有任何用户名以该字母开头的字母。如果您能帮助我修复此代码,以便它仅在实际有用户使用该字母的名称时才显示该字母,我将非常高兴 :) 我通过检查该字母有多少结果来试试运气,但不知何故,这是行不通的。

(仅供引用,我使用用户照片插件,只想显示列表中拥有已批准照片的用户,因此是 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>';
}
}
?>

提前致谢!


更新:

我将 SQL 编辑成这个,但现在我遇到了问题,它吐出一个 </ul>在第一个 li 之前,它搞砸了布局,像这样:

</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>

ul 和 li 的嵌套通常很奇怪。我该如何解决?

            <?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>';
}
?>

最佳答案

更好的解决方案是按字母顺序遍历所有用户,并检查每条记录的第一个字母是否与最后一个记录的字母不同。如果不同,则回显新字母。

关于PHP/SQL/WordPress : Group a user list by alphabet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2629419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com