J'essaie de commander mes utilisateurs par leur numéro de membre - qui est une méta-valeur personnalisée. Il semble que je ne puisse pas facilement commander avec un meta_value
. J'ai lu quelques solutions de contournement, mais je n'arrive pas à comprendre. C'est mon code jusqu'à présent ...
function sort_by_member_number( $vars ) {
if ( isset( $vars->query_vars['orderby'] ) && 'member-number' == $vars->query_vars['orderby'] ) {
$vars = array_merge(
$vars->query_vars, array(
'meta_key' => 'arcc_member_number'
)
);
}
return $vars;
}
add_filter( 'pre_user_query', 'sort_by_member_number' );
arcc_member_number
est une valeur numérique - comment puis-je l'étendre pour trier par cette valeur?
Comme écrit, il est peu probable que cela fasse quoi que ce soit. Si vous ajoutez quelques var_dump
comme ceci:
function sort_by_member_number( $vars ) {
var_dump($vars);
if ( isset( $vars->query_vars['orderby'] ) && 'member-number' == $vars->query_vars['orderby'] ) {
$vars = array_merge(
$vars->query_vars, array(
'meta_key' => 'arcc_member_number'
)
);
}
var_dump($vars);
return $vars;
}
add_filter( 'pre_user_query', 'sort_by_member_number' );
Vous remarquerez que rien n'a changé avant et après votre code, et vous ne trouverez nulle part votre valeur arrc_member_number
. Et, si vous regardez les données vidées, vous remarquerez que la requête a déjà été construite (exemple de requête uniquement):
["query_fields"]=>
string(30) "SQL_CALC_FOUND_ROWS wp_users.*"
["query_from"]=>
string(13) "FROM wp_users"
["query_where"]=>
string(9) "WHERE 1=1"
["query_orderby"]=>
string(28) "ORDER BY user_registered ASC"
["query_limit"]=>
NULL
Et si vous recherchez dans la source le lieu où la requête est exécutée, ce sont les propriétés utilisées.
En d'autres termes, pre_user_query
ne fonctionne pas comme pre_get_posts
. Vous devrez en fait analyser ces valeurs query_*
, ce qui peut être délicat et vous obliger à maîtriser le langage SQL. Si vous pouvez écrire votre requête d'utilisateur pour être quelque chose comme ça ...
$user_query = new WP_User_Query(
array (
'orderby' => 'arcc_member_number',
'meta_query' => array(
array(
'key' => 'arcc_member_number',
'compare' => 'EXISTS'
),
)
)
);
... cela vous aidera à démarrer, mais vous devez toujours modifier query_orderby
car il existe des limites codées en dur pour ce que vous pouvez commander.
function sort_by_member_number( $vars ) {
if ( isset( $vars->query_vars['orderby'] ) && 'arcc_member_number' == $vars->query_vars['orderby'] ) {
$vars->query_orderby = 'ORDER BY arcc_member_number ASC';
}
return $vars;
}
add_filter( 'pre_user_query', 'sort_by_member_number' );
Vous ne pouvez qu'obtenir que les utilisateurs quiont/ le arcc_member_number
meta_key avec cela. Si vous avez besoin de tous les utilisateurs, il vous suffit de trier les requêtes en fonction de cette clé.