你可以用任何一种方法!
使用posts_clauses
, 手动编写JOIN语句(使用$wpdb->prepare()-注意安全!),并添加/自定义orderby
条款。
使用meta_query
需要做几件事。首先,正如kaiser提到的,您必须使用relation
在内部meta_query
为了让它工作。其次,即使定义了meta\\u查询,您仍然需要指定meta_key
参数,否则orderby=meta\\u值将不起作用。我假设这是因为可以同时发生多个连接,这可能使用不同的元键。
我是如何做到这一点的:
function handle_my_sortable_column( $query ) {
global $pagenow;
if( is_admin() && \'upload.php\' == $pagenow && \'my_meta_key\' == get_query_var( \'orderby\' ) ) {
$query->set( \'meta_query\', array(
\'relation\' => \'OR\',
array(
\'key\' => my_meta_key\',
\'value\' => null,
\'compare\' => \'EXISTS\'
),
array(
\'key\' => \'my_meta_key\',
\'value\' => \'\', // must be \'\' value, null does not work
\'compare\' => \'NOT EXISTS\'
)
) );
$query->set( \'meta_key\', \'my_meta_key\' ); // required for orderby
$query->set( \'orderby\', \'meta_value_num\' );
}
}