我正在尝试创建一个查询,按字母显示分类中的所有术语。
以下是我到目前为止的一个字母代码:
<?php $args = array('name__like' => "a", 'order' => 'ASC');
$terms = get_terms('pa_manufacturer', $args);
if ( !empty( $terms ) && !is_wp_error( $terms ) ) {
$count = count($terms);
$i=0;
$term_list = '<ul class="my_term-archive">';
echo '<h2 class="term-letter">A</h2>';
foreach ($terms as $term) {
$i++;
$term_list .= '<li><a href="' . get_term_link( $term ) . '" title="' . sprintf(__('View all post filed under %s', 'my_localization_domain'), $term->name) . '">' . $term->name . '</a></li>';
if ($count != $i) {
$term_list .= '';
}
else {
$term_list .= '</ul>';
}
}
echo $term_list;
}
?>
问题是,目前,我需要填写&#34; name__like&#34;手动部分,以及h2术语字母。
我想在一个查询中返回字母表中的每个字母,动态更改name__like和h2文本。
否则我需要对每个字母进行查询,其中25个字母效率不高。
我实际上并没有这么多运气,所以我希望得到一些建议或帮助。
任何人都可以帮忙吗?
由于
答案 0 :(得分:2)
{Word 1}中的name__like
参数在Wordpress 3.7中已更改。它不再检索具有指定首字母的术语名称,但如果名称中具有指定字母,则检索术语名称
另外,如果您要尝试运行代码26次,则会出现页面加载时间问题
这是我的方法和测试结果
测试结果:在0.01074秒内进行1次查询。
测试输出(请注意,我的测试网站是南非荷兰语,所有名称都是术语名称)
以下是实现这一目标的代码
get_terms
代码如何工作
这里最好的方法是一次性获取所有条款,以避免不必要的db命中。您现在可以将结果从$terms = get_terms('pa_manufacturer');
if ( !empty( $terms ) && !is_wp_error( $terms ) ){
$term_list = [];
foreach ( $terms as $term ){
$first_letter = strtoupper($term->name[0]);
$term_list[$first_letter][] = $term;
}
unset($term);
echo '<ul class="my_term-archive">';
foreach ( $term_list as $key=>$value ) {
echo '<h2 class="term-letter">' . $key . '</h2>';
foreach ( $value as $term ) {
echo '<li><a href="' . get_term_link( $term ) . '" title="' . sprintf(__('View all post filed under %s', 'my_localization_domain'), $term->name) . '">' . $term->name . '</a></li>';
}
}
echo '</ul>';
}
传递到get_terms
循环。
在这里,您将使用您的条款。首先要做的是创建一个新数组foreach
,获取每个术语名称的第一个字母,然后将此字母指定为新数组中的键。每个键的值将包含术语info
这个新数组将用于显示每个字母下的术语名称,如上图所示。
答案 1 :(得分:0)
尝试类似的东西(可能需要调整 - 不经测试而写)
<?php $args = array('order' => 'ASC');
$terms = get_terms('pa_manufacturer', $args);
if ( !empty( $terms ) && !is_wp_error( $terms ) ) {
$count = count($terms);
$i=0;
$term_list = '<ul class="my_term-archive">';
$letter = "A";
foreach ($terms as $term) {
$i++;
if($letter !== strtoupper($term->name[0]) {
$letter= strtoupper($term->name[0]);
echo "<h2 class="term-letter">{$letter}</h2>";
}
$term_list .= '<li><a href="' . get_term_link( $term ) . '" title="' . sprintf(__('View all post filed under %s', 'my_localization_domain'), $term->name) . '">' . $term->name . '</a></li>';
if ($count != $i) {
$term_list .= '';
}
else {
$term_list .= '</ul>';
}
}
echo $term_list;
}
?>`