注:关于简·法布里的回答。。。请确保首先清理传入的数据,否则您将面临各种令人讨厌的查询字符串。。
您可能还应该返回该过滤器上的传入数据,return$query,代替return;
我还认为最好有一个可能值的数组,或者查询可能的元值,这样可以构建一个开关,根据这些可能值中的一个来检查传入值的匹配情况(更容易清理传入的数据)。
这里不是普通用户,否则我会发布一个示例(不知道在这里发布代码是如何工作的-在FAQ中找不到)。
编辑:谢谢你给我发了一张海报,让我知道发布代码的信息。
下面是一个示例,希望它能正常工作……:)
// Only add the needed meta orders
$possible_orders = array( \'some_meta_key\', \'some_other_meta_key\' );
add_filter( \'pre_get_posts\', \'archive_meta_sorting\' );
function archive_meta_sorting( $query_object ) {
if( !is_archive() || is_admin() )
return $query_object;
if( !isset( $_GET[\'orderby\'] ) )
return $query_object;
global $possible_orders;
$orderby = trim( $_GET[\'orderby\'] );
switch( $orderby ) {
case( in_array( $orderby, $possible_orders ) ):
$query_object->set( \'orderby\', \'meta_value\' );
$query_object->set( \'meta_key\', $orderby );
break;
// You don\'t actually need these two cases below, it will work without them
// The switch could actually just be a simple if in_array condition..
case \'title\':
$query_object->set( \'orderby\', \'title\' );
break;
case \'date\':
$query_object->set( \'orderby\', \'date\' );
break;
}
return $query_object;
}
您只需要为元排序传递值,使用本机支持按这些值排序,标题和日期就可以正常工作,order(desc或asc)也可以这样说。
我希望这有助于。。。