我正在尝试将排序选项添加到我在Wordpress admin中添加的一些自定义用户列表列中。这是我的代码:
function mmm_user_sortable_columns_query( $userquery ){
if( \'test_date\' == $userquery -> query_vars[\'orderby\'] ) {
global $wpdb;
$userquery -> query_from .= " LEFT OUTER JOIN $wpdb->usermeta AS alias ON ($wpdb->users.ID = alias.user_id) ";
$userquery -> query_where .= " AND alias.meta_key = \'test_date\' ";
$userquery -> query_orderby = " ORDER BY alias.meta_value " . ($userquery -> query_vars["order"] == "ASC" ? "asc " : "desc ");
}
}
add_action( \'pre_user_query\', \'mmm_user_sortable_columns_query\' );
这不能正确排序,因为我的元值不是字符串,而是日期时间。因此,我尝试将query\\u orderby替换为:
$userquery -> query_orderby = " ORDER BY CONVERT( datetime, alias.meta_value ) " . ($userquery -> query_vars["order"] == "ASC" ? "asc " : "desc ");
但这行不通。和添加
$userquery -> query_where .= " AND alias.meta_type = \'DATETIME\' ";
也不行。我错过了什么?
SO网友:birgire
我认为通过使用pre_get_users
钩子,而不是直接使用pre_user_query
钩
尝试以下操作:
add_action( \'pre_get_users\', function( \\WP_User_Query $q )
{
$qv = &$q->query_vars;
if( isset( $qv[\'orderby\'] ) && \'test_date\' === $qv[\'orderby\'] )
{
// Custom meta query
$qv[\'meta_query\'] = [
\'custom\' => [
\'key\' => \'test_date\',
\'type\' => \'DATETIME\'
]
];
// Order by the \'custom\' meta query
$qv[\'orderby\'] = \'custom\';
}
} );
我们添加了额外的
\'custom\'
输入元查询,以便我们也可以按它排序。这将假定所有用户都具有
test_date
用户元密钥。
希望您能对此进行相应的调整。