作者订购nicename本机不受WP_Query
. 如果您按作者订购,正如您所经历的那样,您可以按作者的ID订购。
因此,您实际上需要进入SQL子句并自己管理它。
这是一种快速而肮脏的黑客行为:
<?php
add_action( \'pre_get_posts\', function( $query ) {
if (
! $query->is_main_query()
|| \'author\' !== $query->get( \'orderby\' )
) {
return;
}
add_filter( \'posts_clauses\', \'177581_add_nicename_orderby\', 10, 2 );
} );
function 177581_add_nicename_orderby( $clauses, $query ) {
global $wpdb;
$clauses[\'join\'] = \'LEFT JOIN \' . $wpdb->users . \' AS author ON ( \' . $wpdb->posts . \'.post_author = author.ID)\';
$clauses[\'orderby\'] = \'author.user_nicename \' . $query->get( \'order\' );
return $clauses;
}
我们需要做的是:在第一步中,如果我们想按作者排序,我们会检查我们对按其名称排序的内容是否一视同仁。如果是这种情况,我们将
posts_clauses
-过滤器,在这里我们可以实际更改SQL语句。
我们必须
加入用户表,因为我们在这个表中找到了nicename相应地修改我们的orderby语句