2 回答
TA贡献1772条经验 获得超5个赞
对术语进行排序不会对您想要做的事情产生影响。如果您想包含结果中没有的字母,那么无论结果如何排序,您都不能将结果用于循环,因为它只能循环遍历其中的内容。
相反,我们可以简单地循环字母表并使用字母作为键来从数组中获取术语。
首先,循环遍历字母表以显示 div 中的字母tag-wrap:
$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>
现在我们将再次循环遍历字母表,这次$term_list使用字母作为键来获取结果。如果没有术语,那么您可以显示一条消息,否则您可以像以前一样显示列表。
<div class="tag-list">
<?php
// 3. display the results by looping through the alphabet to ensure all letters are included
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
// 4. Get the terms for this letter, if there are none show a message
$termsforletter = $term_list[$letter];
if (empty($terms for letter)) { ?>
<p>No Results for this letter</p>
<?php }
else {
foreach ( $termsforletter as $term ): ?>
<div class="tag-item">
<a href="<?php echo get_term_link( $termsforletter );?>"><?php echo $term->name;?></a>
</div>
<?php endforeach;
} ?>
</div>
</div>
<?php endforeach;?>
</div>
(注意:此代码未经测试,但总体思路已经存在)
这也意味着您不必担心对数组进行任何排序,因为我们使用字母循环对显示/进行排序
TA贡献1779条经验 获得超6个赞
这是基于 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>
- 2 回答
- 0 关注
- 124 浏览
添加回答
举报