Я использую плагин Register Plus Redux для дополнения формы регистрации настраиваемыми полями метаданных. Эти поля отображаются внизу каждой страницы сведений о записи пользователя, и их можно получить с помощью get_the_author_meta.
Кроме того, я могу создать столбцы на панели «Пользователь» (представление списка) и сделать эти столбцы сортируемыми. Проблема в том, что, когда я нажимаю на заголовок пользовательского столбца, значение orderby = в URL-адресе кажется игнорируемым. Другими словами, кажется, что запрос, который генерирует представление списка пользователей, не включает настраиваемые метаданные (например, возможно, он требует оператора соединения, если метаданные не находятся в обычном месте для пользовательских данных?). Такое ощущение, что я пропустил шаг.
Вот мой код для создания пользовательских столбцов:
//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' );`
Любые идеи, как я могу обновить запрос, который генерирует список пользователей, чтобы он включал сортировку по моим настраиваемым полям? Или, если это не проблема, как сделать так, чтобы пользовательские заголовки столбцов сортировали список пользователей при нажатии?
Спасибо.
источник
Ответы:
Мой первый ответ был совершенно неуместным, и я полностью переписываю его ...
Но благодаря подсказке Майло я нашел решение здесь:
http://wordpress.mcdspot.com/2011/05/24/search-admin-user-list-on-first-and-last-names/
После адаптации, это работает для меня с «Facebook» и «Twitter»
author_meta
.источник
Я не уверен, что это возможно, возможно, изменив запрос с помощью
pre_user_query
. вот быстрая и грязная функция для просмотра ее содержимого:источник
Самый простой способ сделать это на мой взгляд:
источник
Если ваши мета-значения заполнены не полностью (имеет нулевые значения), отличный ответ @ brasofilo выдаст список пользователей, в котором пропущены пользователи с отсутствующими значениями meta_values.
Однако это легко исправить. Просто сделайте левое соединение :
$user_search->query_from .= " LEFT JOIN {$wpdb->usermeta} m1 ON {$wpdb->users}.ID=m1.user_id AND (m1.meta_key='facebook')";
источник
Я смог добиться пользовательской сортировки пользовательского столбца, используя опубликованный вами код и хуки, за исключением того, что я не использовал фильтр 'request' и не нуждался в дополнительной функции 'orderby'. Wordpress правильно сортирует данные в пользовательском столбце в моем случае по числовому значению, которое я возвращаю в обратном вызове действия manage_users_custom_column.
источник