代码中的主要问题是这一部分:$query->set(\'orderby\',\'meta_value_date\');
因此,您应该使用meta_value
而不是meta_value_date
. (有meta_value_num
, 但这不适合用于按日期排序。)
然后确保meta_type
设置为DATE
(是的,你已经做对了),and 使用正确的日期格式-10132020
确实不是一个好的日期,MySQL/MariaDB也无法将这些值转换为有效的日期-WordPress/WP_Query
当元类型设置为时,指示MySQL/MariaDB将值转换为日期date
.
作为对(你的评论)的回应:“我想,我的朋友们,我的朋友们。”但是,如果不更改格式并使用所选格式mmddYYYY对结果查询排序,是否有任何解决方案“;,对不起,但我认为没有一种简单的方法可以做到这一点。
更好的做法是在保存元数据时使用正确的格式,而不是在检索元数据时。例如,您可以使用ISO 8601 date format 也用于current_time( \'mysql\' )
在WordPress中:Y-m-d
— 但这就是PHP;对于jQuery Datepicker小部件,您可以使用yy-mm-dd
or $.datepicker.ISO_8601
然后给出一个日期2020-10-14
2020年10月14日。
因此,请更正日期格式并使用meta_value
使用orderby
参数,排序将按预期工作。
代码中的其他问题crimes_show_columns()
, 如果需要访问完整的post数据,请使用get_post()
而不是global
呼叫例如,您可以将函数重写为:
function crimes_show_columns( $name, $post_id ) {
// $post = get_post( $post_id ); // like this
// global $post; // not this
switch ( $name ) {
case \'crimedate\':
echo get_post_meta( $post_id, \'date\', true );
break;
}
// action hooks do not need anything be returned back
// return $row_output; // moreover, $row_output is not defined anywhere..
}
add_action( \'manage_posts_custom_column\', \'crimes_show_columns\', 10, 2 );
正确的挂钩(用于添加自定义可排序列的名称)是manage_edit-post_sortable_columns
而不是manage_edit-sortable_columns
因为在edit.php?post_type=post
admin屏幕,屏幕ID为edit-post
; i、 e。<name of the PHP file without .php>-<post type>
.