按字母顺序显示标签列表,每个字母都有一个部分,包括没有术语的空字母
Display Tag List alphabetically with a sections for each letter, including the empty letters that have no terms
我想按字母表及其对应的字母对标签列表进行排序。包括空的。
目前我只列出了带有标签但无法按字母顺序排列 display/sort 的字母。然后我也有它不显示字母表中的空字母的问题。另外值得一提的是我添加了 asort() 因为它没有正确排序。
工作:
- 添加字母分隔符并在其下嵌套其标签
不工作:
- 按字母顺序排序
- 添加空字母数字以及文本“没有要显示此字母的标签”
这是我目前拥有的:
<?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>
目前显示是这样的:
标签包装:
Tagwrap output
标签列表:
与上面相同的排序顺序,它几乎使用相同的 php.
对术语进行排序不会对您尝试做的事情产生影响。如果您想包含不在结果中的字母,那么无论结果如何排序,您都不能将结果用于循环,因为它只能循环遍历那里的内容。
相反,我们可以简单地循环字母表并使用字母作为键从数组中获取术语。
首先,遍历字母表以显示 tag-wrap
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>
现在我们将再次遍历字母表,这次使用字母作为键从您的 $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>
(注意:此代码未经测试,但总体思路是存在的)
这也意味着您不必担心对数组进行任何排序,因为我们使用字母表循环对显示进行排序/
这是基于 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>
我想按字母表及其对应的字母对标签列表进行排序。包括空的。
目前我只列出了带有标签但无法按字母顺序排列 display/sort 的字母。然后我也有它不显示字母表中的空字母的问题。另外值得一提的是我添加了 asort() 因为它没有正确排序。
工作:
- 添加字母分隔符并在其下嵌套其标签
不工作:
- 按字母顺序排序
- 添加空字母数字以及文本“没有要显示此字母的标签”
这是我目前拥有的:
<?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>
目前显示是这样的: 标签包装: Tagwrap output
标签列表: 与上面相同的排序顺序,它几乎使用相同的 php.
对术语进行排序不会对您尝试做的事情产生影响。如果您想包含不在结果中的字母,那么无论结果如何排序,您都不能将结果用于循环,因为它只能循环遍历那里的内容。
相反,我们可以简单地循环字母表并使用字母作为键从数组中获取术语。
首先,遍历字母表以显示 tag-wrap
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>
现在我们将再次遍历字母表,这次使用字母作为键从您的 $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>
(注意:此代码未经测试,但总体思路是存在的)
这也意味着您不必担心对数组进行任何排序,因为我们使用字母表循环对显示进行排序/
这是基于 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>