复杂的WP_QUERY订单请求:按天定义,然后按时间定义

时间:2015-02-27 作者:jdsteinbach

我有一个网站,有几千个带有时间戳的自定义帖子类型的帖子。它们通过一些分类法和各种视图中的日期查询来显示(我已经把这些都做好了)。棘手的部分是按照一种独特的日期格式进行排序:客户坚持帖子应该按天排序DESC,然后在每天内按时间排序ASC。据我所知in the Codex, order 仅接受date 作为参数,而不是日期(&;时间作为可区分的值。是否有任何方法可以在不大量重写半打存档税务模板文件的情况下实现我所寻求的目标?

我已经在使用以下方法按日期对DESC进行排序,并希望找到一个适合此函数的解决方案:

function my_post_sort( $vars ) {
    if ( is_tax(array(\'series\', \'speakers\', \'topics\', \'venues\'))) {
        $vars[\'order\'] = \'ASC\';
    }
    return $vars;
}
add_filter(\'query_vars\', \'my_post_sort\');

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

你没有使用query_vars 非常正确-此过滤器用于白名单“public”查询变量,而不是实际设置它们的值。也叫“相当早”(wp::parse_request), 所以任何条件标记is_tax() 在这个阶段总是错误的。

使用pre_get_posts 覆盖默认查询的操作。话虽如此,你需要一个习惯ORDER BY 条款使用posts_orderby 过滤器:

function wpse_179686_posts_orderby( $orderby, $wp_query ) {
    if ( $wp_query->is_main_query() && $wp_query->is_tax( array( \'series\', \'speakers\', \'topics\', \'venues\' ) ) )
        $orderby = \'DATE( post_date ) DESC, TIME( post_date ) ASC\';

    return $orderby;
}

add_filter( \'posts_orderby\', \'wpse_179686_posts_orderby\', 10, 2 );

结束

相关推荐

具有多个对象类型和UPDATE_COUNT_CALLBACK的注册分类

这个register_taxonomy 接受数组作为对象类型,这样我就可以将尽可能多的自定义帖子类型链接到自定义分类法。那很好。问题是,默认分类计数在默认设置下始终为零,那么我应该为参数设置什么呢update_count_callback?我一直在思考这个问题,因为分类法与多个帖子类型相关联,所以当我查看特定的帖子类型时,计数是有意义的。那么,如果自定义分类法链接到多个自定义帖子类型,那么处理自定义分类法计数的最佳方法是什么?