(修改后的答案)
因此,在通过评论进行讨论之后,您真正需要的是一个定制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
.