web-dev-qa-db-ja.com

複数値キーの値に一致するユーザーの数を数えられますか?

カスタムフィールドで特定の値を持つユーザーの数を見つけようとしています。問題は、このカスタムフィールドは複数の値を許可することです。 meta_keyが1つの値しか許さないとき、このコードはうまく働きます、しかし、どうすればそれがそれが複数の値で働くようにすることができますか?

$args = array('meta_key' => 'fruits_user_like', 'meta_value' =>'Apple');
$users = get_users($args);
$number_of_users = count($users);
5
Fraser

あなたがmeta_valueとしてシリアライズされたデータを使っているのなら、Pieterが示唆しているように、それは最悪です。

ただし、シリアル化の問題を回避する方法がない場合は、comparename__の値を使用してLIKEname__を使用するとmeta_queryが役立つ場合がありますか。

例:

//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'
            )
        )    
    )    
);

...私は疑問に思う。

上記はcomparename__の値LIKEname__では機能しません。REGEXPname__を使用し、その値として正規表現を渡す必要があります。

以下を試してください。

$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() );

ToWP_User_Queryに切り替えます。count_totalパラメータを渡してからWP_User_Query::get_total()メソッドを呼び出すことができるため、この場合に適しています。

2
userabuser