在WordPress中使用GET_USER进行排序

时间:2013-02-02 作者:require_once

我有一个wp\\u users表,它有一个列排序。我知道get\\u users()返回所有用户。我使用它就像get\\u用户(\'orderby=ordering\')我得到了帮助表单this link

但不幸的是,它并没有按排序列排序。有什么帮助吗?

这是我的密码

foreach (get_users (\'orderby=ordering\') as $user)
                            {
                                $user = /* Get full WP_User object instance. */ new WP_User ($user->ID);

1 个回复
最合适的回答,由SO网友:Simon 整理而成

我认为在WordPress安装中修改默认表是个坏主意。通常,您不应该修改数据库或核心代码,而应该使用API函数来获得所需的功能。

在这种情况下,您将使用用户元字段存储每个用户的排序顺序。最简单的方法是在用户配置文件屏幕中添加一个字段,以下是我在插件中的操作:

function my_user_contactmethods($contactmethods, $user = null)
{
    /* Standard WordPress fields which we don\'t need */
    unset($contactmethods[\'aim\']);
    unset($contactmethods[\'yim\']);
    unset($contactmethods[\'jabber\']);

    /* Now let\'s add the new fields */
    $contactmethods[\'company\'] = __( \'Company name\', \'my_domain\' );
    $contactmethods[\'title\'] = __( \'Title\', \'my_domain\' );
    $contactmethods[\'sort_order\'] = __( \'Order\', \'my_domain\' );

    return $contactmethods;
}
add_filter(\'user_contactmethods\', \'my_user_contactmethods\', 10, 2);
当然,您也可以使用update_user_meta 如果您愿意,或者您只是不需要输入字段。不幸地WP_User_Query 不支持按订购meta_value 喜欢WP_Query 是的,但是通过pre_user_query 我们可以将其添加到标准查询中。

function my_pre_user_query($query) {

    global $wpdb;

    $meta_query = new WP_Meta_Query();
    // This is just to construct a calid Meta Query, we dont\' really run it
    $meta_query->parse_query_vars( array(\'meta_key\' => \'sort_order\') );

    if ( !empty( $meta_query->queries ) ) {
        // This requires that the users has meta_values for sort order
        $clauses = $meta_query->get_sql( \'user\', $wpdb->users, \'ID\', $query );
        $query->query_from .= $clauses[\'join\'];
        $query->query_where .= $clauses[\'where\'];
        $query->query_fields = \'DISTINCT \' . $query->query_fields;
    }

    // This is where the ordering is applied, finally 
    $query->query_orderby = "ORDER BY " . $wpdb->usermeta . ".meta_value" . " " . $query->query_vars[\'order\'];
}
add_action(\'pre_user_query\', \'my_pre_user_query\');
由于这将影响所有用户查询,因此仅在适当的地方添加操作,并在不再需要时删除。

结束