tax_query: Order by slug?

时间:2017-06-08 作者:nnyl-rin

长话短说,我在工作中继承了一个Wordpress网站,我有一个正在处理/修复的事件页面。我对Wordpress和php都是新手,我需要一些帮助。

每个活动按学校学期(春季、夏季、秋季)进行分类。然而,我不能让学期按字母顺序排序(目前它被列为:秋、春、夏……但我需要:春、夏、秋)。

我想按slug排序学期,因为我将slug设置为学期代码,顺序正确(春季=14,夏季=15,秋季=16)。

这是我的代码:

 public function eventCalendar() {
    global $post;
    $type = array(\'event\');
    $terms = get_terms(\'semesters\');
    $markup = \'\';
    $count = 0;

    // List the semester name, 
    // and list each event under that term.
    // Events should be listed chronologically based on start date.
    $markup .= \'<ul class="event-calendar">\';
    foreach ($terms as $semester) :
      $markup .= \'<li class="event-calendar__semester">\';
      $markup .= \'<h4>\' . $semester->name . \'</h4>\';


      $events = new WP_Query(array(
        \'post_type\' => \'events\',
        \'posts_per_page\' => -1,
        \'meta_key\' => \'start_date\',
        \'orderby\' => \'meta_value_num\',
        \'order\' => \'ASC\',
        \'tax_query\' => array(
          array(
            \'taxonomy\' => \'semesters\',
            \'terms\'    => $semester->term_id,

          ),
        ),
      ));

      if ($events->have_posts()) :
        $markup .= \'<div class="event-calendar__events">\';

        while ($events->have_posts()) : $events->the_post();
          $sd = get_field(\'start_date\', false, false);
          $ed = get_field(\'end_date\', false, false);
          $startdate = new DateTime($sd);
          $enddate = new DateTime($ed);

          $markup .= \'<div class="event-calendar__event">\';

            $markup .= \'<span class="event-date__start">\' . $startdate->format(\'M d\') . \'</span>\';
            $markup .= (($ed) && $sd !== $ed) ? \' &ndash; <span class="event-date__end">\' . $enddate->format(\'M d\') . \'</span>\' : \'\';
            $markup .= \'<a href="\' . get_permalink() . \'">\' . get_the_title() . \'</a>\';

          $markup .= \'</div>\';
        endwhile;

        $markup .= \'</div>\';
      endif;

      wp_reset_query();

      $markup .= \'</li>\';

    endforeach;
    $markup .= \'</ul>\';

    return $markup;
  }
我尝试了“order”和“orderby”的几种不同组合,但都没有成功。任何帮助都将受到这位新手的衷心感谢!

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

如果我了解你的情况,你的活动顺序是正确的,但你的学期不是。

如果您更改第4行

$terms = get_terms(\'semesters\');

$terms = get_terms(\'semesters\', array(
    \'orderby\' => \'slug\'
) );
这应该会让学期按你想要的顺序排列。”“order”默认为ASC,这是您需要显示14、15、16的参数,因此不需要任何其他参数。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post