换行/关闭按首字母排序的帖子列表的‘Query’

时间:2014-11-13 作者:physalis

对不起,我不知道该怎么称呼它。

我在一个网站上工作,我正在建立一个医生名单,按照姓氏/头衔的字母顺序排列,而属于一封信的所有帖子都应该在下面分组,就像这样:

A

<约翰·阿巴克尔博士

B

<div class="letter_item">
  <h2>A</h2>
  <ul>
    <li><a href="#link">Dr. John Arbuckle</a></li>
    <li><a href="#link">Dr. Mack Ancie</a></li>
  </ul>
</div>
到目前为止,由于我无法正确关闭它,列表是层叠的(请参见live example链接)。我使用的代码如下所示,因为它检查第一个字母并仅在使用不同字母时插入h2,所以它不能用于包装列表的代码。

<div class="section_index grid_12 section_aerzte" id="aerzte">
  <?php
    $args = array(
        \'orderby\' => \'title\',
        \'order\' => \'ASC\',
        \'post_type\' => \'arzt\',
        \'caller_get_posts\' => 1,
        \'posts_per_page\' => 20,
    );

    function mam_posts_orderby ($orderby) {
    global $mam_global_orderby;
    if ($mam_global_orderby) $orderby = $mam_global_orderby;
    return $orderby;
    }
    add_filter(\'posts_orderby\',\'mam_posts_orderby\');
    $mam_global_orderby = "
    UPPER(CONCAT(REVERSE(SUBSTRING_INDEX(REVERSE($wpdb->posts.post_title),\' \',1)),$wpdb->posts.post_title))
    ";

    query_posts($args);
    if (have_posts()) {
      $curr_letter = \'\';
      while (have_posts()) {
        the_post();

        $fullposttile = "$post->post_title";
        $words = explode(\' \', $fullposttile);
        $lastWord = array_pop($words);

        $this_letter = strtoupper(substr($lastWord,0,1));
        if ($this_letter != $curr_letter) {
          echo "<div class=\'letter_item\'><h2>$this_letter</h2><ul>";
          $curr_letter = $this_letter;
        }
?>

<li>
    <a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a>
</li>

  <?php }
}
?>
/** Here it goes wrong, obviously **/
        </ul>
    </div>

</div>
如果有帮助,测试站点的实例如下http://www.physalis-web.com/aerztegemeinschaft/aerzte . 有没有(更好的)方法来正确包装?非常感谢您的帮助!

1 个回复
最合适的回答,由SO网友:Milo 整理而成

问题是,每次你开始写一封新信时,你都没有关闭前一封信的列表。

在您的支票内if ($this_letter != $curr_letter), 在echo, 您必须添加</ul> 在所有情况下,除非$curr_letter 为空(第一个字母)。

if ($this_letter != $curr_letter) {
    if(\'\' != $curr_letter){
        echo \'</ul></div>\';
    }
    echo "<div class=\'letter_item\'><h2>$this_letter</h2><ul>";
    $curr_letter = $this_letter;
}

结束

相关推荐

tax_query showing no results

我正在创建一个音乐数据库网站,其中包含两种自定义帖子类型:曲目和专辑。我已经将这些曲目链接到各自的专辑,并为专辑的slug定制了分类法。在每个相册页面上,我都试图通过检索所有曲目来获取相册的曲目列表dub_album_slug 与当前相册的slug匹配的分类法。以下是我的查询代码:global $post; $post_slug = $post->post_name; $args = array ( \'post_type\' => \'dub_track\',