可排序自定义列排序不正确

时间:2018-05-27 作者:mad2kx

我使用下面的代码按照meta_value. 但在这一特定列中,我显示了日期,例如:2018年4月20日或2018年6月1日

排序工作可以排序,但现在当我排序列时,它会显示为2018年4月29日、2018年5月29日、2018年6月29日、2018年4月28日、2018年5月28日、2018年6月28日。。。等等等等。。。

是否有办法以适当的日期格式对该列进行排序,如2018年4月29日、2018年4月28日、2018年4月27日等。。。。???

我使用的代码如下:

add_filter( \'manage_edit-post_sortable_columns\', \'closing_sortable_columns\' );

function closing_sortable_columns( $columns ) {

    $columns[\'closing\'] = \'closing\';

    return $columns;
}

add_action( \'pre_get_posts\', \'closing_column_orderby\' );  
function closing_column_orderby( $query ) {  
    if( ! is_admin() )  
        return;  

    $orderby = $query->get( \'orderby\');  

    if( \'closing\' == $orderby ) {  
        $query->set(\'meta_key\',\'closing\');  
        $query->set(\'orderby\',\'meta_value_num\');  
    }  
} 
我试图改变meta_value_numasc 但这只是混淆了一切,使概述更加糟糕。

2 个回复
SO网友:cjbj

默认情况下,元值将被视为字符串,从而得到您得到的结果。正如您从codex on wp_query 您可以通过定义meta_type. 像这样:

    $query->set(\'meta_type\',\'DATETIME\');  

SO网友:cybmeta

您需要以可排序的格式存储日期。例如,MySQL日期格式(WordPress在数据库中默认使用的日期格式):

// Convert date to MySQL date format before it is stored in database
$date = date(\'Y-m-d\', \'the_date_value\' );
然后可以按该日期字段排序:

add_action( \'pre_get_posts\', \'closing_column_orderby\' );  
function closing_column_orderby( $query ) {  
    if( ! is_admin() )  
        return;  

    $orderby = $query->get( \'orderby\');  

    if( \'closing\' == $orderby ) {  
        $query->set(\'meta_key\',\'closing\');
        $query->set(\'meta_type\',\'DATE\');
        $query->set(\'orderby\',\'meta_value\');  
    }  
} 
然后,在显示之前,更改为所需的显示格式。

// Convert from MySQL format to the desired format for display
// For example, use the date format configured in WordPress settings
$date = date( get_option(\'date_format\'), \'the_date_value\' );

结束