按字母顺序排列的词汇表在循环中关闭div

时间:2013-08-20 作者:Robbert

编写这段代码是为了制作一个按字母顺序排列的词汇表,它可以正常工作,但有一个问题。我不知道如何用相同的第一个字母结束一组帖子。

这段代码查看第二个单词的第一个字母(这是我的项目),然后用第一个字母创建一个标题,并将所有匹配的行放在该标题下。但在那之后,我想用</div> (并在球场外首先打开它)。但是如果我在循环中放入close div,代码会放置一个</div> 每行之后。

所以我需要这样一句话:在最后一行之后用匹配的第一个字母关闭div。然后打开一个新的div并再次执行。

希望你明白我需要什么。非常感谢。

    <?php
     $obj = get_queried_object();
     $post_type = $obj->name;

    $args = array(
        \'post_type\' => $post_type,
        \'orderby\' => \'title\',
        \'order\' => \'ASC\',
        \'posts_per_page\' => 20,
    );

    query_posts($args);

    if (have_posts()) : $curr_letter = \'\'; while (have_posts()) : the_post();

    $title = get_the_title();
    $title_array = explode(\' \', $title);
    $second_word = $title_array[1];

    $this_letter = substr($second_word, 0, 1);

    if ($this_letter != $curr_letter) {

    $curr_letter = $this_letter; ?> 

        <div id="sort-<?php echo strtolower($this_letter); ?>" class="alpha_title">
            <?php echo $this_letter; ?>
        </div><!--End alpha_title-->

    <?php } ?>

    <a href="<?php the_permalink(); ?>"><?php echo $second_word; ?></a>

    <?php endwhile; endif; ?> 

    <div class="clear"></div>

</div><!--End glossary-->

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

如果你搜索这个网站,大多数“display nth post different”问题都与这个问题密切相关,老实说,这是一个PHP+逻辑问题,而不是WordPress问题。

if (have_posts()) { 
  $curr_letter = \'\'; 
  echo \'<div class="alphawrapper">\';
    while (have_posts()) {
      the_post();
      $title = get_the_title();
      $title_array = explode(\' \', $title);
      $second_word = $title_array[1];
      $this_letter = substr($second_word, 0, 1);
      if ($this_letter != $curr_letter) {
        if (!empty($curr_letter)) {
          echo \'</div><div class="alphawrapper">\';
        }
        $curr_letter = $this_letter; ?> 
        <div id="sort-<?php echo strtolower($this_letter); ?>" class="alpha_title">
          <?php echo $this_letter; ?>
        </div><!--End alpha_title--><?php 
      } ?>
      <a href="<?php the_permalink(); ?>"><?php echo $second_word; ?></a><?php
    }
  echo \'</div>\';
} 
然而,do not use query_posts. 网上有上千个“教程”推荐它,包括部分抄本,但不要使用它。

应该注意的是,使用此replace the main query 在页面上可以increase page loading times, 在最坏的情况下more than doubling the amount of work needed or more. 虽然易于使用,但该功能prone to confusion and problems 过后有关详细信息,请参阅下面关于注意事项的注释。

http://codex.wordpress.org/Function_Reference/query_posts (重点矿山)

在上使用筛选器pre_get_posts 相反在您的主题中functions.php 放置:

function pregp_wpse_110875($qry) {
  if ($qry->is_main_query() && $qry->is_archive()) {
    $qry->set(\'posts_per_page\',20);
    $qry->set(\'orderby\',\'title\');
    $qry->set(\'order\',\'ASC\');
  }
}
add_action(\'pre_get_posts\',\'pregp_wpse_110875\');

结束

相关推荐

Problems with loop

我的索引中有这个循环。php: <?php if (have_posts()) : while (have_posts()) : get_template_part( \'post\' ); endwhile; endif; ?> 调用此模板<?php ?> <h2 id=\"post-<?php the_ID()