• 解決済 rei15

    (@rei15)


    get_usersでユーザ一覧を取得する際に、meta_keyの条件を付与して取得したいですが、
    うまくいきませんでした。

    ■Advanced Custom Fieldを利用し、ユーザプロフィールに以下の項目を追加しました。
    項目名:hobby
    項目チェックボックス:fishing, drawing, reading

    Hobby=fishingのユーザ一覧を取得するとして

    $args = array(
                'meta_query' => array(
                    array(
                        'meta_key' => 'hobby',
                        'meta_value' > array('fishing'),
                        'meta_compare' => 'IN'
                    )
                )
    );
    $users = get_users($args);

    上記のように、meta_queryを使ってみたのですが、条件関係なく、全ユーザを取得してしまいます。
    meta_valueを配列ではなく、文字列にしてmeta_compare=>’LIKE’にしてもだめでした。

    var_dump($users)で内容を確認しても、meta関連の情報が格納されていないですが、
    このやり方は間違っているのでしょうか。
    get_user_metaは、特定のIDに対して meta_key を絞ることができますが、
    今回やりたいのはユーザ一覧取得です。

    よろしくお願いします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • mocomoco

    (@silent_dandy)

    meta_queryの使用方法が間違っているようです。
    meta_queryに記述するarrayにはmeta_は不要です。

    $args = array(
                'meta_query' => array(
                    array(
                        'key' => 'hobby',
                        'value' > array('fishing'),
                        'compare' => 'IN'
                    )
                )
    );
    $users = get_users($args);

    参考
    https://blog.sus-happy.net/201105/customfield-search/

    トピック投稿者 rei15

    (@rei15)

    >mocomocoさん、

    お返事ありがとうございます!
    実は meta_なしで、key & value で試したのですが、
    それもだめでした。

    ACFを利用しているのは関係しているのでしょうか。
    DBを除いてみると、user_catにこんな値が入っています。

    a:1:{i:0;s:7:"fishing";}

    再度質問してしまって恐れ入ります。

    よろしくお願いいたします。

    mocomoco

    (@silent_dandy)

    すいませんACFの部分をさらっと流してしまってました。
    ACFにおいて複数の値を取りうるフィールド(チェックボックスなど)をカスタムフィールドに保存した場合、ご提示の例の用にシリアライズされて保存されます。

    そのため'IN'などの一致判定が効かず'LIKE'を用いた部分一致を利用する必要があります。

    Advanced Custom Fieldsプラグインを使う際の注意点など
    http://notnil-creative.com/blog/archives/1752

    トピック投稿者 rei15

    (@rei15)

    mocomocoさん、

    本当に色々教えていただきありがとうございます。

    色々試したのですが全ユーザリストで取得してしまいます。
    get_user

    $args = array(
        'meta_query' => array(
            array(
                'key' => 'hobby',
                'value' > array('fishing'),
                'compare' => 'IN'
            )
        )
    );
    $users = get_users($args);
    $args = array(
        'meta_query' => array(
            array(
                'key' => 'hobby',
                'value' > 'fishing',
                'compare' => 'LIKE'
            )
        )
    );
    $users = get_users($args);
    $args = array(
        'meta_query' => array(
            array(
                'key' => 'hobby',
                'value' > '"fishing"',
                'compare' => 'LIKE'
            )
        )
    );
    $users = get_users($args);

    get_usersでは無理という可能性があるのでしょうか。

    かなり検索かけましたが、全然解決案が見つからず。。

    こんな返信で申し訳ないです。

    mocomoco

    (@silent_dandy)

    本来なら2番目と3番目のやり方で取得できるのですが、私の方でテスト環境を作るときにコピペして動作確認してようやく原因がわかりました。

    正しく動かないのは本来、

    'value' => 'fishing',

    となるべきところが

    'value' > 'fishing',

    となってしまっているタイポが原因でした。
    (最初のコピペ段階で気付かず申し訳ないです。)

    この部分さえ修正すれば、

    $args = array(
        'meta_query' => array(
            array(
                'key' => 'hobby',
                'value' => 'fishing',
                'compare' => 'LIKE'
            )
        )
    );
    $users = get_users($args);

    または

    $args = array(
        'meta_query' => array(
            array(
                'key' => 'hobby',
                'value' => '"fishing"',
                'compare' => 'LIKE'
            )
        )
    );
    $users = get_users($args);

    のどちらかでご希望の取得ができると思います。

    トピック投稿者 rei15

    (@rei15)

    mocomocoさん、

    ありがとうございます!!

    情けないミスで本当に本当に申し訳ありません。。
    穴を掘って入りたいです。。
    ご自身のテスト環境までテストしてくださって、本当に感謝しきれていないです。
    本当に本当にありがとうございます!
    関数の使い方のほかに、文法も、もう少し注意していきます!

    ありがとうございました m(___)m

    トピック投稿者 rei15

    (@rei15)

    解決済みにさせていただきます。

    ありがとうございました。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「特定の meta_key のユーザ一覧取得」には新たに返信することはできません。