Php 按字母顺序显示标记列表,每个字母包含一个部分,包括没有术语的空字母
我想按字母表和相应的字母对标签列表进行排序。包括空的 目前,我只列出有标签的字母,但无法按字母顺序显示/排序。我还有一个问题,它没有显示字母表中的空字母。同样值得一提的是,我添加了asort(),因为它没有正确排序 工作:Php 按字母顺序显示标记列表,每个字母包含一个部分,包括没有术语的空字母,php,wordpress,sorting,tags,taglist,Php,Wordpress,Sorting,Tags,Taglist,我想按字母表和相应的字母对标签列表进行排序。包括空的 目前,我只列出有标签的字母,但无法按字母顺序显示/排序。我还有一个问题,它没有显示字母表中的空字母。同样值得一提的是,我添加了asort(),因为它没有正确排序 工作: 添加字母分隔符并在其下嵌套其标记 不工作: 按字母顺序排序 添加空字母数字以及文本“此字母无需显示标签” 这就是我到目前为止所做的: <?php $args = array( 'taxonomy' => 'post_tag', '
- 添加字母分隔符并在其下嵌套其标记
- 按字母顺序排序
- 添加空字母数字以及文本“此字母无需显示标签”
<?php
$args = array(
'taxonomy' => 'post_tag',
'hide_empty' => false,
'order' => 'ACS',
'orderby' => 'slug'
);
$terms = get_terms($args);
$term_list = [];
foreach ( $terms as $term ){
$first_letter = strtoupper($term->name[0]);
$term_list[$first_letter][] = $term;
}
unset($term);
asort($term_list );?>
<div class="tag-wrap">
<ul>
<?php foreach ( $term_list as $key=>$value ) : ?>
<li class="border-radius">
<a href="#<?php echo $key; ?>"><h3><?php echo $key; ?></h3></a>
</li>
<?php endforeach; ?>
</ul>
</div>
<div class="tag-list">
<?php
asort($term_list );
foreach ( $term_list as $key=>$value ) : ?>
<div class="term-row" id="<?php echo $key; ?>">
<div class="term-letter">
<h3><?php echo $key; ?></h3>
</div>
<div class="tag-items">
<?php foreach ( $value as $term ): ?>
<div class="tag-item">
<a href="<?php echo get_term_link( $term );?>"><?php echo $term->name;?></a>
</div>
<?php endforeach;?>
</div>
</div>
<?php endforeach;?>
</div>
-
对术语进行排序不会对您尝试做的事情产生影响。如果希望包含结果中不包含的字母,则无论其排序方式如何,都不能将结果用于循环,因为它只能循环其中的内容
相反,我们可以简单地在字母表上循环,并使用字母作为键从数组中获取术语
首先,在字母表中循环以显示标记包装中的字母:
$alphabet = range('A', 'Z'); // 1. use range to get the alphabet
<div class="tag-wrap">
<ul>
<?php
// 2. display the regular alphabet instead of the letters from your results
foreach ( $alphabet as $letter ) : ?>
<li class="border-radius">
<a href="#<?php echo $letter; ?>"><h3><?php echo $letter; ?></h3></a>
</li>
<?php endforeach; ?>
</ul>
</div>
(注意:此代码未经测试,但其总体思路已存在)
这也意味着您不必担心对数组进行任何排序,因为我们使用字母循环对显示进行排序。这是一个基于FluffyKitten答案的工作循环,只要更改复选框以显示文本(如果没有字母术语)
<?php
$alphabet = range('A', 'Z');
$args = array(
'taxonomy' => 'post_tag',
'hide_empty' => false,
'order' => 'DESC',
'orderby' => 'slug'
);
$terms = get_terms($args);
$term_list = [];
foreach ( $terms as $term ){
$first_letter = strtoupper($term->name[0]);
$term_list[$first_letter][] = $term;
}
unset($term); ?>
<div class="tag-wrap">
<ul>
<?php foreach ( $alphabet as $letter ) : ?>
<li>
<a href="#<?php echo $letter; ?>"><h3><?php echo $letter; ?></h3></a>
</li>
<?php endforeach; ?>
</ul>
</div>
<div class="tag-list">
<?php
foreach ( $alphabet as $letter) : ?>
<div class="term-row" id="<?php echo $letter; ?>">
<div class="term-letter">
<h3><?php echo $letter;?></h3>
</div>
<div class="tag-items">
<?php
$termsforletter = $term_list[$letter];
if (empty($termsforletter )): ?>
<div class="tag-item">
<p>No topics matching this letter </p>
</div>
<?php else:
foreach ( $termsforletter as $term ): ?>
<div class="tag-item">
<a href="<?php echo get_term_link( $term ); ?>"><?php echo $term->name; ?></a>
</div>
<?php endforeach;?>
<?php endif; ?>
</div>
</div>
<?php endforeach; ?>
</div>
-
嗨,LadyX,您在术语查询中拼错了顺序值,它是“ASC”而不是“ACS”,此外,要按字母顺序排序,您必须使用顺序值“DESC”。请看这篇相关文章:LadyX,我在下面添加了一个答案,说明如何在保持“空”字母的同时让它工作。让我知道这是否适合你!for循环不起作用,但我对其进行了一些修改,使其达到相同的结果。非常感谢你的帮助。
<?php
$alphabet = range('A', 'Z');
$args = array(
'taxonomy' => 'post_tag',
'hide_empty' => false,
'order' => 'DESC',
'orderby' => 'slug'
);
$terms = get_terms($args);
$term_list = [];
foreach ( $terms as $term ){
$first_letter = strtoupper($term->name[0]);
$term_list[$first_letter][] = $term;
}
unset($term); ?>
<div class="tag-wrap">
<ul>
<?php foreach ( $alphabet as $letter ) : ?>
<li>
<a href="#<?php echo $letter; ?>"><h3><?php echo $letter; ?></h3></a>
</li>
<?php endforeach; ?>
</ul>
</div>
<div class="tag-list">
<?php
foreach ( $alphabet as $letter) : ?>
<div class="term-row" id="<?php echo $letter; ?>">
<div class="term-letter">
<h3><?php echo $letter;?></h3>
</div>
<div class="tag-items">
<?php
$termsforletter = $term_list[$letter];
if (empty($termsforletter )): ?>
<div class="tag-item">
<p>No topics matching this letter </p>
</div>
<?php else:
foreach ( $termsforletter as $term ): ?>
<div class="tag-item">
<a href="<?php echo get_term_link( $term ); ?>"><?php echo $term->name; ?></a>
</div>
<?php endforeach;?>
<?php endif; ?>
</div>
</div>
<?php endforeach; ?>
</div>