我有一个查询,它输出一个分类法标签列表,按名字组织,并有一个字母标题,如下所示:
E
埃琳娜·费兰特
H
海伦DeWitt
J
琼·迪迪翁
乔纳森·弗兰森
K
石黑和夫
M
麦琪·纳尔逊
P
柏拉图
R
瑞秋·库斯克
罗伯托·博拉尼奥
S
希拉·赫提
等。
如何将这个分类标签列表按姓而不是名按字母顺序排列?因此,结果将是:
B
罗伯托·博拉尼奥
C
瑞秋·库斯克
D
海伦DeWitt
琼·迪迪翁
F
埃琳娜·费兰特
乔纳森·弗兰森
H
希拉·赫提
I
石黑和夫
P
柏拉图
N
麦琪·纳尔逊
等。
以下是查询:
<?php
$list = '';
$groups = array();
$tags = get_terms('authors',$args);
if( $tags && is_array( $tags ) ) {
foreach( $tags as $tag ) {
$first_letter = strtoupper( $tag->name[0] );
$groups[ $first_letter ][] = $tag;
}
if( !empty( $groups ) ) {
foreach( $groups as $letter => $tags ) {
$list .= "<div class='titleLetter'>" . $letter . "</div><ul>";
foreach( $tags as $tag ) {
$list .= '<li><a href="/authors/'.$tag->slug.'">'.$tag->name.'</a></li>';
}
$list .= '<br></ul>';
}
$list .= '';
}
}
echo $list; ?>发布于 2021-08-16 11:33:43
如果给定的代码适用于名称排序。那么这个就可以为orderby姓工作了。
<?php
$list = '';
$groups = array();
$tags = get_terms('authors',$args);
if( $tags && is_array( $tags ) ) {
$i=0;
foreach( $tags as $tag ) {
$lastname_arr=explode(' ', $tag->name);
$lastname=$lastname_arr[count($lastname_arr)-1];
$first_letter = strtoupper( $lastname[0] );
$groups[ $first_letter ][$lastname.'_'.$i] = $tag;
$i++;
}
foreach($groups as $key=>$group ){
ksort($groups[$key]);
}
ksort($groups);
if( !empty( $groups ) ) {
foreach( $groups as $letter => $tags ) {
$list .= "<div class='titleLetter'>" . $letter . "</div><ul>";
foreach( $tags as $tag ) {
$list .= '<li><a href="/authors/'.$tag->slug.'">'.$tag->name.'</a></li>';
}
$list .= '<br></ul>';
}
$list .= '';
}
}
echo $list;
?>我在这里做的是:
lastnames.
。
https://stackoverflow.com/questions/68801673
复制相似问题