web-dev-qa-db-ja.com

1つの配列に対するMeta_Queryキー値を組み合わせる

私の検索はうまくいっているのに、クライアントが考えていなかった要求を受け取っただけの状況があります。姓(例:john)または姓(例:doe)で検索した場合は、結果が完全にもたらされます。しかし、そのフルネームを検索すると(例えばjohn doe)、0の結果が得られます。

私は見回してみましたが、 "first_name last_name"と検索を比較する方法を見つけることができないようです。

私はフォーラムで同様の質問をスキャンしましたが、それらは完全に異なる方向に進んでいるようには見えません。誰かが何か知識を持っていたり、私を正しいスレッドに向けることができたら、私は感謝するでしょう。

これが私のコードの要約です:

$args = array(
    'role'           => 'Subscriber',
    'meta_query'     => array(
        array(
                'key'     => 'membership_class',
                'value'   => 'Full',
                'compare' => '=',
                'type'    => 'CHAR',
            ),
        array(
            'relation' => 'OR',
            array(
                'key'     => 'first_name',
                'value'   => $usersearch,
                'compare' => 'LIKE'
            ),
            array(
                'key'     => 'last_name',
                'value'   => $usersearch,
                'compare' => 'LIKE'
            ),
            array(
                'key'     => 'personal_city',
                'value'   => $usersearch,
                'compare' => 'LIKE',
                'type'    => 'CHAR',
            ),
            array(
                'key'     => 'personal_province',
                'value'   => $usersearch,
                'compare' => 'LIKE',
                'type'    => 'CHAR',
            ),
            array(
                'key'       => 'treatments',
                'value'     => $usersearch,
                'compare'   => 'LIKE',

            ),



        ),

    ),
);
3
Faye

IN演算子を使用して検索語を単語配列に分割した場合はどうなりますか。

$args = array(
    'role'           => 'Subscriber',
    'meta_query'     => array(
        array(
                'key'     => 'membership_class',
                'value'   => 'Full',
                'compare' => '=',
                'type'    => 'CHAR',
            ),
        array(
            'relation' => 'OR',
            array(
                'key'     => 'first_name',
                'value'   => explode( ' ', $usersearch ),
                'compare' => 'IN'
            ),
            array(
                'key'     => 'last_name',
                'value'   => explode( ' ', $usersearch ),
                'compare' => 'IN'
            ),
            array(
                'key'     => 'personal_city',
                'value'   => $usersearch,
                'compare' => 'LIKE',
                'type'    => 'CHAR',
            ),
            array(
                'key'     => 'personal_province',
                'value'   => $usersearch,
                'compare' => 'LIKE',
                'type'    => 'CHAR',
            ),
            array(
                'key'       => 'treatments',
                'value'     => $usersearch,
                'compare'   => 'LIKE',

            ),



        ),

    ),
);
2
dbeja

今日、私はこれを解決して解決しました。私の成功が同じボートに乗っている誰かを助けることを願っています。

メタクエリ配列は本当のmeta_keyを必要とするので、実際にはユーザーのためにそれを作成し、渡したい情報をそれに入れる必要があります。詳細については add_user_meta 関数を参照してください。

だから、私の検索を実行する前に、私はこれを持っています:

<?php 
$allusers = get_users(array(
    'role' => 'subscriber',

));

foreach ($allusers as $user) {
    $firstName = get_user_meta($user->ID, 'first_name', true);
    $lastName = get_user_meta($user->ID, 'last_name', true);

    $full_name = $firstName . ' ' . $lastName . ' ';

    $uid = $user->ID;


    add_user_meta( $uid, 'full_name', $full_name );


}
?>

ここで私はすべてのユーザーに電話をかけ、それからすべての新しいメタユーザーに対して、ユーザーの姓と名の両方を含む私のカスタム値で定義しました。多くのユーザーからの問い合わせがこのページで行われていて、衝突が発生していないことを確認したいだけでした。

それから私の検索クエリの下に私はもう一つのクエリを追加しました...

array(
    'key'     => 'full_name',
    'value'   => $usersearch,
    'compare' => 'LIKE'
),

そしてそれは私の検索がJohn、Doe、そしてJohn Doeの3人全員に対して機能しているということです。

0
Faye