web-dev-qa-db-fra.com

Classement des résultats de WP_User_Query en fonction des ID utilisateur utilisés dans le paramètre include

J'utilise WP_User_Query pour ramener une liste d'utilisateurs. Je passe une liste d'utilisateurs spécifiques à inclure dans les résultats. Par exemple:

    $user_ids = array( 1, 5, 9, 61, 24, 12 );

    $args = array(
        'include' => $user_ids,
        'count_total' => true,
        'search' => sanitize_text_field( $_GET['phrase'] )
    );

    $query = new WP_User_Query( $args );

Les résultats sont actuellement classés par user_login. Comment modifier ma requête afin que les résultats renvoyés soient ordonnés par mon tableau $user_id? Par exemple, si 3 utilisateurs doivent être renvoyés (par exemple les ID 5, 61 et 12), l'utilisateur 5 doit être affiché en premier, l'utilisateur 61 en second et l'utilisateur 12 en troisième.

Réf: http://codex.wordpress.org/Class_Reference/WP_User_Query

1
henrywright

Je pense qu'au lieu de traiter avec des requêtes SQL complexes et des moyens de les faire utiliser par WordPress, une simple uasort peut faire l'affaire:

$uids = array( 1 );

$user_query = new WP_User_Query( array( 'include' => $uids ) );

$users = (array) $user_query->results;

usort( $users, function( $a, $b ) use( $uids ) {
  return array_search( $a->ID, $uids) < array_search( $b->ID, $uids ) ? -1 : 1;
} );

// use as usual
foreach ( $users as $user ) {
    echo '<p>' . $user->display_name . '</p>';
}
1
gmazzap

Je sais qu'il est tard, mais si quelqu'un est intéressé, essayez: $ args ['orderby'] = 'include';

Travaillé pour moi ..

2
Dima Barabash