J'essaie de trouver le nombre d'utilisateurs ayant une certaine valeur dans un champ personnalisé. Le problème est que ce champ personnalisé autorise plusieurs valeurs. Ce code fonctionne bien lorsque meta_key n'autorise qu'une seule valeur, mais comment puis-je le faire fonctionner avec plusieurs valeurs?
$args = array('meta_key' => 'fruits_user_like', 'meta_value' =>'Apple');
$users = get_users($args);
$number_of_users = count($users);
Si vous utilisez des données sérialisées en tant que méta_valeur, cela craint, comme l'a suggéré Pieter, il vaut mieux ne pas le faire.
Cependant, s'il n'y a aucune solution au problème de la sérialisation, je me demande si un meta_query
utilisant une valeur compare
de LIKE
pourrait aider ...
Exemple:
//psuedo serialized data... (e.g. value of meta_key = fruits_user_like)
//a:4:{i:0;s:5:"Apple";i:1;s:6:"orange";i:2;s:6:"banana";i:3;s:31:"serialized_data_sucks_sometimes";}
$users = get_users(
array(
'meta_query' => array(
array(
'key' => 'fruits_user_like',
'value' => array(
'Apple',
'orange',
'banana',
'serialized_data_sucks_sometimes'
),
'compare' => 'LIKE'
)
)
)
);
...Je me demande.
Ce qui précède ne fonctionnera pas avec une valeur compare
de LIKE
, nous devons utiliser REGEXP
et transmettre une expression régulière en tant que valeur.
Essayez ce qui suit:
$args = array(
'meta_query' => array(
array(
'key' => 'fruits_user_like',
'value' => '(Apple|orange|banana)',
'compare' => 'REGEXP'
)
),
'count_total' => true
);
$users = new WP_User_Query($args);
print_r( $users->get_total() );
Passez à l’utilisation deWP_User_Query
, c’est plus approprié dans ce cas car nous pouvons passer un paramètre count_total
, puis appeler la méthode WP_User_Query::get_total()
.