web-dev-qa-db-fra.com

The User-to-Check-to-User-to-Control-to-User-to-Control.

Ma configuration

J'ai une question sur le filtrage sur le filtre utilisateur dans le panneau d'administration. J'ai ajouté le code pour afficher le filtre "registration_date", qui fonctionne correctement. J'ai trouvé ce site Web pour décrire le processus . Cette partie fonctionne très bien .

Maintenant, j'essaie d'implémenter une commande par défaut par le plus récent utilisateur enregistré. Dans mon function.php, j'ai essayé l'approche que j'ai trouvée ici . Cette partie ne fonctionne que partiellement . Voici mon code:

add_action('pre_get_users', 'change_user_order');

function change_user_order($query) {
    $screen = get_current_screen();
    if( is_admin() && 'users' == $screen->base) {
        if( !isset($query->query['orderby']) ) {
            $query->set('orderby', 'registered');
            $query->set('order', 'DESC');
        }
    }

   // We need to remember to return the altered query.
   return $query;
}

Mon problème

Par défaut, cette partie fonctionne correctement car le filtrage est effectué par la plus récente. Maintenant, il semble également qu’il désactive toute autre possibilité de trier d’autres colonnes pouvant être triées (ex. Asc login). Par exemple, cette URL wp-admin/users.php?orderby=login&order=asc n'affichera pas l'utilisateur commandé par le champ de connexion. Qu'est-ce que j'ai mal fait?


Update - Solution acceptée & code final

Grâce à Sally, j'ai pu modifier mon code initial afin que mes exigences initiales soient remplies.

Par souci d’exhaustivité, le code final pour cette sélection par défaut de colonnes triables et d’ordre dans le panneau de l’utilisateur est joint ici:

add_action('pre_get_users', 'change_user_order');

function change_user_order($query) {
    $screen = get_current_screen();
    if( is_admin() && 'users' == $screen->base) {
        // Set default `orderby` to 'registered'.
        if( empty( $_REQUEST['orderby'] ) || !isset($query->query_vars['orderby']) ) {
            $query->set('orderby', 'registered');
        }
        // Set default `order` to 'DESC'.
        if( empty( $_REQUEST['order'] ) || !isset($query->query_vars['order']) ) {
            $query->set('order', 'DESC');
        }       
    }

   // We need to remember to return the altered query.
   return $query;
}
1
XaWin

Premièrement, utilisez $query->query_vars etnot$query->query.

Deuxièmement, vous devriez exécuter cette vérification conditionnelle avant de remplacer la requête correspondante var:

empty( $_REQUEST['{VAR}'] ) || !isset($query->query_vars['{VAR}'])

{VAR} correspond à la clé de la requête varname/ telle que orderby.

Alors essayez ceci, qui a fonctionné pour moi:

// Set default `orderby` to 'registered'.
if( empty( $_REQUEST['orderby'] ) || !isset($query->query_vars['orderby']) ) {
    $query->set('orderby', 'registered');
}

// Set default `order` to 'DESC'.
if( empty( $_REQUEST['order'] ) || !isset($query->query_vars['order']) ) {
    $query->set('order', 'DESC');
}

que vous utiliseriez à la place de:

if( !isset($query->query['orderby']) ) {
    $query->set('orderby', 'registered');
    $query->set('order', 'DESC');
}
0
Sally CJ