(修改后的答案)
因此,在通过评论进行讨论之后,您真正需要的是一个定制ORDER BY 子句,它在WordPress post查询中(WP_Query), 您可以通过posts_orderby filter 就像您可以设置自定义GROUP BY 第条通过posts_groupby filter.
我需要的订单是2019年6月| 2019年5月| 2019年4月| 2019年4月
如果元的值eventMonth 始终采用以下格式:{month name} - {4-digit year} 例如June - 2019 —请注意不应为“–”的破折号/宣传或任何其他特殊字符ORDER BY 子句可以按照上面指定的顺序对帖子进行排序:(假定WordPress表前缀为wp_ 本例按降序排序)
ORDER BY STR_TO_DATE( REPLACE( wp_postmeta.meta_value, \'-\', \'1,\' ), \'%M %e, %Y\' ) DESC
PHP代码:
修改ORDER BY 条款:
add_filter( \'posts_orderby\', \'query_order_by_filter\', 10, 2 );
function query_order_by_filter( $orderby, $query ) {
// Modify only if and when applicable.
if ( \'eventMonth_date\' === $query->get( \'orderby\' ) ) {
global $wpdb;
$order = $query->get( \'order\' );
return "STR_TO_DATE( REPLACE( $wpdb->postmeta.meta_value, \'-\', \'1,\' ), \'%M %e, %Y\' ) $order";
}
return $orderby;
}
发表文章时/
WP_Query 查询,设置
orderby 参数到
eventMonth_date:
$args = array(
\'meta_key\' => \'eventMonth\',
\'orderby\' => \'eventMonth_date\',
\'order\' => \'DESC\',
// ... other args.
);
$query = new WP_Query( $args );
PS:如果您使用
get_posts() 而不是
new WP_Query(), 确保设置
suppress_filters 到
false.