Question

J'ai un plugin personnalisé qui interroge les utilisateurs et usermeta, mais je maintenant besoin d'admins de filtre sur les résultats. Une version très simplifiée de ma requête SQL est:

SELECT * FROM usermeta LEFT JOIN users ON users.ID = user_id 
WHERE meta_key = 'last_name' AND 
user_role != 'admin' 
ORDER BY meta_value 
ASC LIMIT 0, 25

user_role est pas un champ, et j'ai vu comment elle est stockée sous forme de chaîne de configuration, mais je ne vois pas comment faire une requête équivalente à cela. Est-ce que je manque quelque chose?

Merci.

Était-ce utile?

La solution

Vous pouvez utiliser cette fonction:

// get users with specified roles
function getUsersWithRole( $roles ) {
    global $wpdb;
    if ( ! is_array( $roles ) )
        $roles = array_walk( explode( ",", $roles ), 'trim' );
    $sql = '
        SELECT  ID, display_name
        FROM        ' . $wpdb->users . ' INNER JOIN ' . $wpdb->usermeta . '
        ON          ' . $wpdb->users . '.ID             =       ' . $wpdb->usermeta . '.user_id
        WHERE       ' . $wpdb->usermeta . '.meta_key        =       \'' . $wpdb->prefix . 'capabilities\'
        AND     (
    ';
    $i = 1;
    foreach ( $roles as $role ) {
        $sql .= ' ' . $wpdb->usermeta . '.meta_value    LIKE    \'%"' . $role . '"%\' ';
        if ( $i < count( $roles ) ) $sql .= ' OR ';
        $i++;
    }
    $sql .= ' ) ';
    $sql .= ' ORDER BY display_name ';
    $userIDs = $wpdb->get_col( $sql );
    return $userIDs;
}

Autres conseils

La 3ème ligne dans la fonction n'a pas fonctionné pour moi comme retourne un booléen array_walk au lieu du tableau désiré. J'ai changé la ligne 3 à:

$roles = array_map('trim',explode( ",", $roles ));

Et ça marche pour moi maintenant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top