使用foreach创建一个逐字显示的查询

时间:2014-10-09 13:49:30

标签: php wordpress foreach

我正在尝试创建一个查询,按字母显示分类中的所有术语。

以下是我到目前为止的一个字母代码:

<?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个字母效率不高。

我实际上并没有这么多运气,所以我希望得到一些建议或帮助。

任何人都可以帮忙吗?

由于

2 个答案:

答案 0 :(得分:2)

{Word 1}中的name__like参数在Wordpress 3.7中已更改。它不再检索具有指定首字母的术语名称,但如果名称中具有指定字母,则检索术语名称

另外,如果您要尝试运行代码26次,则会出现页面加载时间问题

这是我的方法和测试结果

测试结果:在0.01074秒内进行1次查询。

测试输出请注意,我的测试网站是南非荷兰语,所有名称都是术语名称

enter image description here

以下是实现这一目标的代码

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;
}
?>`