按CPT结果按用户排序的SQL->仅带用户的DISPLAY_NAME->ID已知

时间:2017-01-27 作者:rwkiii

我有一个自定义的post类型,它在Posteta中存储了几个用户ID。

我需要在管理员帖子列表(edit.php)中对该列进行排序。该列按其postmeta用户ID正确排序,但我正在显示用户。将\\u name显示为该列中的内容。我不知道如何构造SQL子句来实现这一点。

add_filter( \'posts_clauses\', array( $this, \'sort_post_clauses\' ), 10, 2 );
function sort_post_clauses( $clauses, $query ) {

    //Join user table onto the postmeta table
    $clauses[ \'join\' ] .= " LEFT JOIN {$wpdb->users} ON {$wpdb->postmeta}.meta_value={$wpdb->users}.ID";
    $clauses[ \'orderby\' ] = "{$wpdb->users}.display_name ";
    $clauses[ \'orderby\' ] .= ( \'ASC\' == strtoupper( $query->get( \'order\' ) ) ) ? \'ASC\' : \'DESC\';

}
上面的“join”子句不正确。

postmeta表中存在postmeta列“some\\u user\\u id”。我不确定如何形成join语句以使其在查询中可用。

我需要按user->display\\u name排序的结果。

1 个回复
SO网友:brianjohnhanna

如果我正确理解了您的问题,我想您只想按作者对自定义列进行排序,因为默认情况下,这将按未测试的ID进行排序,但看不出它为什么不起作用。列的显示值应该无关紧要。

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

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

    // Change my_custom_column to the name of your column
    if( \'my_custom_column\' == $orderby ) {
        $query->set(\'orderby\',\'author\');
    }
}