Estou usando o plug-in Register Plus Redux para aumentar um formulário de registro com campos de metadados personalizados. Esses campos são exibidos na parte inferior de cada página de detalhes do registro do usuário e podem ser recuperados com get_the_author_meta.
Além disso, sou capaz de criar colunas no painel Usuário (a exibição em lista) e tornar essas colunas classificáveis. O problema é que, quando clico no cabeçalho da coluna personalizada, o orderby = value no URL parece ser ignorado. Em outras palavras, parece que a consulta que gera a exibição de lista de usuários não inclui os metadados personalizados (por exemplo, talvez exija uma declaração de junção se os metadados não estiverem no local habitual para os dados do usuário?). Parece que perdi um passo.
Aqui está o meu código para criar as colunas personalizadas:
//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);`
E aqui está o meu código para tornar essas colunas classificáveis:
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' );`
Alguma idéia de como posso atualizar a consulta que gera a lista de usuários para incluir a classificação por meus campos personalizados? Ou, se esse não é o problema, como fazer com que os títulos das colunas personalizadas classifiquem a lista de usuários quando clicados?
Obrigado.
fonte
Respostas:
Minha primeira resposta foi completamente errada e estou reescrevendo completamente ...
Mas, graças à dica de Milo, encontrei a solução aqui:
http://wordpress.mcdspot.com/2011/05/24/search-admin-user-list-on-first-and-last-names/
Depois de adaptá-lo, isso funciona para mim com 'facebook' e 'twitter'
author_meta
.fonte
Não sei se é possível, talvez modificando a consulta via
pre_user_query
. aqui está uma função rápida e suja para visualizar seu conteúdo:fonte
Maneira mais simples de fazer isso na minha opinião:
fonte
Se seus meta-valores não forem totalmente preenchidos (possui nulos), a excelente resposta do @ brasofilo produzirá uma lista de usuários que omite os usuários com valores meta_values ausentes.
A correção é fácil no entanto. Basta fazer uma junção esquerda :
$user_search->query_from .= " LEFT JOIN {$wpdb->usermeta} m1 ON {$wpdb->users}.ID=m1.user_id AND (m1.meta_key='facebook')";
fonte
Consegui obter a classificação do usuário de uma coluna personalizada usando o código e os ganchos que você postou, exceto que eu não usei o filtro 'request' nem precisei de uma função extra 'orderby'. O Wordpress classifica corretamente os dados na coluna personalizada no meu caso, pelo valor numérico que retorno no retorno de chamada da ação 'manage_users_custom_column'.
fonte