J'utilise le plugin Register Plus Redux pour augmenter un formulaire d'inscription avec des champs de métadonnées personnalisés. Ces champs s'affichent au bas de chaque page de détail d'enregistrement utilisateur et ils peuvent être récupérés avec get_the_author_meta.
De plus, je peux créer des colonnes dans le panneau Utilisateur (la vue liste) et rendre ces colonnes triables. Le problème est que, lorsque je clique sur l'en-tête de colonne personnalisé, la valeur orderby = dans l'URL semble être ignorée. Autrement dit, il semble que la requête qui génère la vue de liste des utilisateurs n'inclut pas les métadonnées personnalisées (par exemple, elle nécessite peut-être une instruction de jointure si les métadonnées ne se trouvent pas à l'emplacement habituel pour les données utilisateur?). J'ai l'impression d'avoir raté une étape.
Voici mon code pour créer les colonnes personnalisées:
//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);`
Et voici mon code pour rendre ces colonnes triables:
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' );`
Avez-vous des idées sur la façon de mettre à jour la requête qui génère la liste des utilisateurs afin qu'elle inclue le tri par mes champs personnalisés? Ou, si ce n'est pas le problème, comment faire pour que les en-têtes de colonne personnalisés trient la liste des utilisateurs lorsque vous cliquez dessus?
Je vous remercie.
la source
Réponses:
Ma première réponse était complètement fausse et je la réécris complètement ...
Mais grâce à l'indice de Milo, j'ai trouvé la solution ici:
http://wordpress.mcdspot.com/2011/05/24/search-admin-user-list-on-first-and-last-names/
Après l'avoir adapté, cela fonctionne pour moi avec 'facebook' et 'twitter'
author_meta
.la source
Je ne suis pas sûr que ce soit possible, peut-être en modifiant la requête via
pre_user_query
. voici une fonction rapide et sale pour afficher son contenu:la source
La façon la plus simple de le faire à mon avis:
la source
Si vos méta-valeurs ne sont pas entièrement renseignées (a des valeurs nulles), l'excellente réponse de @ brasofilo produira une liste d'utilisateurs qui omet les utilisateurs avec des valeurs de méta-valeurs manquantes.
La correction est cependant facile. Faites juste un joint gauche :
$user_search->query_from .= " LEFT JOIN {$wpdb->usermeta} m1 ON {$wpdb->users}.ID=m1.user_id AND (m1.meta_key='facebook')";
la source
J'ai pu effectuer le tri par l'utilisateur d'une colonne personnalisée en utilisant le code et les hooks que vous avez publiés, sauf que je n'ai pas utilisé le filtre «demande», ni besoin d'une fonction supplémentaire «orderby». Wordpress trie correctement les données de la colonne personnalisée dans mon cas en fonction de la valeur numérique que je renvoie dans le rappel d'action 'manage_users_custom_column'.
la source