web-dev-qa-db-fra.com

Puis-je compter le nom d'utilisateur correspondant à une valeur dans une clé à valeurs multiples?

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);
5
Fraser

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().

2
userabuser