web-dev-qa-db-fra.com

Comment rendre une colonne personnalisée sur l'écran d'administration des utilisateurs triable?

Je suis en train d'ajouter une colonne supplémentaire à l'écran d'administrateur des utilisateurs pour afficher la société pour chaque utilisateur. J'ai réussi à faire apparaître cette colonne dans le tableau, mais j'ai vraiment du mal à la classer par ordre alphabétique.

L'en-tête de colonne semble être activé comme pouvant être trié, mais si je clique dessus pour réorganiser l'ordre de la liste, la table est réorganisée par ordre alphabétique en fonction du nom d'utilisateur et non de la société.

J'ai passé beaucoup de temps sur le Web à chercher et à adapter d'autres solutions, mais toujours pas de chance. J'ai vu de nombreux exemples de création de colonnes personnalisées pouvant être triées pour des écrans d'administrateurs de type publication, mais pas pour l'écran d'administration d'utilisateur.

Vous trouverez ci-dessous le code que j'utilise actuellement pour générer une colonne "Société" sur l'écran d'administration des utilisateurs. Cette colonne récupère les métadonnées de l'auteur "société".

//MAKE THE COLUMN SORTABLE

function user_sortable_columns( $columns ) {
    $columns['company'] = 'Company';
    return $columns;
}

add_filter( 'manage_users_sortable_columns', 'user_sortable_columns' );

add_action( "pre_get_users", function ( $WP_User_Query ) {

if ( isset( $WP_User_Query->query_vars["orderby"] )
    && ( "company" === $WP_User_Query->query_vars["orderby"] )
) {
    $WP_User_Query->query_vars["meta_key"] = "company_name";
    $WP_User_Query->query_vars["orderby"] = "meta_value";
}

}, 10, 1 );
5
Jordan Rogers

Ceci est mon code qui ajoute une colonne personnalisée triable (appelée ID du fournisseur ) à la table des utilisateurs:

function fc_new_modify_user_table( $column ) {
    $column['vendor_id'] = 'Vendor ID';
    return $column;
}
add_filter( 'manage_users_columns', 'fc_new_modify_user_table' );

function fc_new_modify_user_table_row( $val, $column_name, $user_id ) {
    switch ($column_name) {
        case 'vendor_id' :
            return get_the_author_meta( 'vendor_id', $user_id );
        default:
    }
    return $val;
}
add_filter( 'manage_users_custom_column', 'fc_new_modify_user_table_row', 10, 3 );

function fc_my_sortable_cake_column( $columns ) {
    $columns['vendor_id'] = 'Vendor ID';

    //To make a column 'un-sortable' remove it from the array unset($columns['date']);

    return $columns;
}
add_filter( 'manage_users_sortable_columns', 'fc_my_sortable_cake_column' );

Simple et fonctionne bien pour moi.

2
ban-geoengineering

l'action request fonctionne avec post. pour l'utilisateur c'est pre_get_users:

add_action("pre_get_users", function ($WP_User_Query) {

    if (    isset($WP_User_Query->query_vars["orderby"])
        &&  ("company" === $WP_User_Query->query_vars["orderby"])
    ) {
        $WP_User_Query->query_vars["meta_key"] = "company_name";
        $WP_User_Query->query_vars["orderby"] = "meta_value";
    }

}, 10, 1);
1
mmm