长话短说,我在工作中继承了一个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) ? \' – <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”的几种不同组合,但都没有成功。任何帮助都将受到这位新手的衷心感谢!
最合适的回答,由SO网友:WebElaine 整理而成
如果我了解你的情况,你的活动顺序是正确的,但你的学期不是。
如果您更改第4行
$terms = get_terms(\'semesters\');
至
$terms = get_terms(\'semesters\', array(
\'orderby\' => \'slug\'
) );
这应该会让学期按你想要的顺序排列。”“order”默认为ASC,这是您需要显示14、15、16的参数,因此不需要任何其他参数。