我正在使用Register Plus Redux插件来添加具有自定义元数据字段的注册表单。这些字段显示在每个用户记录详细信息页面的底部,可以使用get_the_author_meta进行检索。
另外,我能够在“用户”面板(列表视图)中创建列,并使这些列可排序。问题是,当我单击自定义列标题时,URL中的orderby =值似乎被忽略了。换句话说,似乎生成用户列表视图的查询不包括自定义元数据(例如,如果元数据不在用户数据的通常位置,则可能需要加入语句)。感觉我错过了一步。
这是我创建自定义列的代码:
//add columns to User panel list page
function add_user_columns( $defaults ) {
$defaults['company'] = __('Company', 'user-column');
$defaults['title'] = __('Title', 'user-column');
return $defaults;
}
function add_custom_user_columns($value, $column_name, $id) {
if( $column_name == 'company' ) {
return get_the_author_meta( 'company_name', $id );
}
if( $column_name == 'title' ) {
return get_the_author_meta( 'titlefunction', $id );
}
}
add_action('manage_users_custom_column', 'add_custom_user_columns', 15, 3);
add_filter('manage_users_columns', 'add_user_columns', 15, 1);`
这是使这些列可排序的代码:
function user_sortable_columns( $columns ) {
$columns['company'] = 'Company';
return $columns;
}
add_filter( 'manage_users_sortable_columns', 'user_sortable_columns' );
function user_column_orderby( $vars ) {
if ( isset( $vars['orderby'] ) && 'company' == $vars['orderby'] ) {
$vars = array_merge( $vars, array(
'meta_key' => 'company',
'orderby' => 'meta_value',
'order' => 'asc'
) );
}
return $vars;
}
add_filter( 'request', 'user_column_orderby' );`
有什么想法可以更新生成用户列表的查询,使其包括按我的自定义字段进行排序?或者,如果这不是问题,那么如何使自定义列标题在单击时对用户列表进行排序?
谢谢。