我认为在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\');
由于这将影响所有用户查询,因此仅在适当的地方添加操作,并在不再需要时删除。