【发布时间】:2020-07-22 07:48:57
【问题描述】:
我正在尝试设置一个 WordPress 查询和循环,以便事件按降序顺序按年份分组,每年有一个标题,然后按升序按月份排序 每年组的顺序,如下所示:
2020
- 2020 年 1 月 1 日
- 2020 年 2 月 1 日
- 2020 年 3 月 1 日
2019
- 2019 年 1 月 1 日
- 2019 年 2 月 1 日
- 2019 年 3 月 1 日
我在这里找到了一些指向正确方向的有用线程,例如 this one,它使用直接 SQL 查询来按年份获取帖子,然后在 WP_Query 上运行通常的循环来分组和排序每个组内的帖子。然而,就我而言,我没有使用post_date,而是有一个event_end_date 的自定义字段(使用高级自定义字段),它应该定义帖子和组定义的顺序。
链接示例中的 SQL 查询是
$sql = "SELECT DISTINCT(YEAR(`post_date`)) as years FROM $posts WHERE post_type = 'testimonials' ORDER BY years DESC"; //Get all post year list by DESC
$result = $wpdb->get_results($sql);
foreach($result as $rs) {
echo '<h2>'.$rs->years.'</h2>';
$args = array(
'post_type' => 'event',
'post_per_page'=> -1,
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'DESC',
'date_query' => array(array(
'year'=> $rs->years,
),),
);
$loop = new WP_Query($args);
if($loop->have_posts()) {
while($loop->have_posts()) : $loop->the_post();
echo '<a href="'.get_permalink().'">'.get_the_date().'</a>';
endwhile;
}
}
我不太确定如何修改它,以便我可以查询 event_end_date 自定义字段,并形成年份组,然后我可以在其中列出按月 ASC 排序的帖子。
我假设我需要在这里使用手动 SQL 查询,因为典型的 WP_Query 不允许以两种不同的方式进行排序,正如我所描述的那样?我可以轻松地将事件输出到带有每年标题的组中,但只能以一组顺序,即 ASC 或 DESC。感谢您在这里提供的任何帮助,如果有任何不清楚的地方,请告诉我。
【问题讨论】:
-
SELECT * FROM $posts WHERE post_type = 'testimonials' ORDER BY year(post_date) DESC, month(post_date) asc, day(post_date) asc -
感谢@lufc 的回复,但我正在尝试使用自定义字段
event_end_date来组成组并排序帖子,如我原来的帖子中所述。 -
在这种情况下,听起来您的问题是“如何将多个 ORDER BY 语句应用于 Wordpress 中的自定义字段”。你可以在这里看到:advancedcustomfields.com/resources/orde-posts-by-custom-fields 和这里:wordpress.stackexchange.com/questions/65769/…
-
@lufc 我了解如何使用多个 orderby 值以及如何使用自定义字段设置订单 - 我正在尝试获取帖子中描述的条目组
-
创建查询以列出所有事件,按年和月排序。当您循环访问事件时,只需检查当前行的年份是否等于前一行的年份,如果不等于则插入一些 HTML 来创建新组。
标签: php mysql sql wordpress advanced-custom-fields