カスタムフィールドで特定の値を持つユーザーの数を見つけようとしています。問題は、このカスタムフィールドは複数の値を許可することです。 meta_keyが1つの値しか許さないとき、このコードはうまく働きます、しかし、どうすればそれがそれが複数の値で働くようにすることができますか?
$args = array('meta_key' => 'fruits_user_like', 'meta_value' =>'Apple');
$users = get_users($args);
$number_of_users = count($users);
あなたがmeta_valueとしてシリアライズされたデータを使っているのなら、Pieterが示唆しているように、それは最悪です。
ただし、シリアル化の問題を回避する方法がない場合は、compare
name__の値を使用してLIKE
name__を使用すると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'
)
)
)
);
...私は疑問に思う。
上記はcompare
name__の値LIKE
name__では機能しません。REGEXP
name__を使用し、その値として正規表現を渡す必要があります。
以下を試してください。
$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()
メソッドを呼び出すことができるため、この場合に適しています。