web-dev-qa-db-fra.com

Masquer les administrateurs de la liste des utilisateurs sauf l'utilisateur actuel (administrateur)

ce code fonctionne très bien! le problème est que ce code masque également l'utilisateur actuel (s'il est administrateur), donc ce que j'essaie de faire est de masquer tous les administrateurs sauf l'utilisateur actuel.

j'ai besoin d'aide pour éditer SQL pour que cela fonctionne avec "$ user_ID"

function isa_pre_user_query($user_search) {
  $user = wp_get_current_user();
  //if (!current_user_can('administrator')) { // Is Not Administrator - Remove Administrator
    global $wpdb;
    $user_ID = get_current_user_id();
    $user_search->query_where = 
        str_replace('WHERE 1=1', 
            "WHERE 1=1 AND {$wpdb->users}.ID IN (
                 SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta 
                    WHERE {$wpdb->usermeta}.meta_key = '{$wpdb->prefix}capabilities'
                    AND {$wpdb->usermeta}.meta_value NOT LIKE '%administrator%')", 
            $user_search->query_where
        );
  //}
}
add_action('pre_user_query','isa_pre_user_query');
1
need-help

Citant les WordPress VIP Meilleures pratiques de développement :

Rappelez-vous que la base de données n'est pas une boîte à outils. Bien que vous puissiez effectuer beaucoup de travail côté base de données, votre code évoluera beaucoup mieux en gardant les requêtes simples et en effectuant les calculs et la logique nécessaires en PHP.

Cela dit, vous pouvez simplement essayer d’obtenir tous les utilisateurs non-administrateurs, puis d’ajouter l’utilisateur actuel aux résultats, s’il dispose de capacités d’administrateur.

Vous pouvez facilement y parvenir en utilisant des fonctions WordPress de niveau supérieur:

    <?php
    /* get all non-admin users */
    $args = array( 
        'meta_key'     => 'wp_capabilities', 
        'meta_value'   => 'Administrator', /* you better check for a capability, not a role */
        'meta_compare' => 'NOT LIKE'
    );
    $user_query = new WP_User_Query( $args );

    /* if current user is admin, get its user object */
    $current_admin_user = current_user_can( 'activate_plugins' ) ? wp_get_current_user() : null;

    /* merge non-admin users with current admin-user */
    $results = $user_query->get_results();
    $results[] = $current_admin_user;

    /* update the user query */
    $user_query->__set( 'results', $results );
    $user_query->__set( 'total_users', count( $results ));

    /* do whatever you want */
    print_r($user_query);
1
Jan Beck