按姓氏按字母顺序排列 Wordpress 分类法列表
Alphabetize Wordpress taxonomy list by last name
我有一个查询输出分类标签列表,按名字组织,标题按字母顺序排列,如下所示:
E
埃琳娜·费兰特
H
海伦·德薇特
J
琼·迪迪恩
乔纳森·弗兰岑
K
石黑一雄
M
玛吉尼尔森
P
柏拉图
R
雷切尔·卡斯克
罗伯托·波拉尼奥
S
希拉·赫蒂
等等
如何按姓氏而不是名字按字母顺序排列此分类标签列表?
所以结果将是:
B
罗伯托·波拉尼奥
C
雷切尔·卡斯克
D
海伦·德薇特
琼·迪迪恩
F
埃琳娜·费兰特
乔纳森·弗兰岑
H
希拉·赫蒂
我
石黑一雄
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; ?>
如果给定的代码适用于名字排序。那么这个将适用于按姓氏排序。
<?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;
?>
我在这里做的是:
- 用姓氏的首字母替换数组索引。
- 将 ksort(按键排序)函数应用于数组和子数组(以便在新索引上创建自定义 orderby)
我有一个查询输出分类标签列表,按名字组织,标题按字母顺序排列,如下所示:
E
埃琳娜·费兰特
H
海伦·德薇特
J
琼·迪迪恩
乔纳森·弗兰岑
K
石黑一雄
M
玛吉尼尔森
P
柏拉图
R
雷切尔·卡斯克
罗伯托·波拉尼奥
S
希拉·赫蒂
等等
如何按姓氏而不是名字按字母顺序排列此分类标签列表? 所以结果将是:
B
罗伯托·波拉尼奥
C
雷切尔·卡斯克
D
海伦·德薇特
琼·迪迪恩
F
埃琳娜·费兰特
乔纳森·弗兰岑
H
希拉·赫蒂
我
石黑一雄
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; ?>
如果给定的代码适用于名字排序。那么这个将适用于按姓氏排序。
<?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;
?>
我在这里做的是:
- 用姓氏的首字母替换数组索引。
- 将 ksort(按键排序)函数应用于数组和子数组(以便在新索引上创建自定义 orderby)