web-dev-qa-db-fra.com

Combinaison des valeurs de clé Meta_Query pour un tableau

Je suis dans une situation où ma recherche fonctionne mais le client vient de présenter une demande que je n'avais pas prise en compte. Si vous effectuez une recherche par prénom (par exemple, john) ou par nom de famille (par exemple, doe), vous obtiendrez votre résultat. Mais si vous recherchez leur nom complet (par exemple, John Doe), vous obtenez 0 résultats.

J'ai regardé autour de moi, mais je n'arrive pas à trouver le moyen de comparer la recherche à "prénom_nom".

J'ai parcouru les mêmes questions sur le forum, mais elles ne semblent pas aider/semblent aller dans une direction totalement différente. Si quelqu'un a des connaissances ou s'il peut m'indiquer le bon fil, je vous en serais reconnaissant.

Voici le résumé de mon code:

$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

Et si vous utilisiez l'opérateur IN et scindiez le terme de recherche dans un tableau de mots:

$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

Je me suis accroupi et résolu ceci aujourd'hui. En espérant que mon succès aidera quiconque dans le même bateau.

Etant donné que le tableau de méta-requêtes a besoin d'une vraie méta_key, vous devez en créer une pour l'utilisateur et la renseigner avec les informations que vous souhaitez transmettre. Voir la fonction add_user_meta pour plus d'informations.

Donc, avant de lancer ma recherche, j'ai ceci:

<?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 );


}
?>

Ici, j’ai appelé tous les utilisateurs, puis j’ai défini pour eux tous les nouveaux méta-utilisateurs, avec ma valeur personnalisée qui inclut à la fois le prénom et le nom de l’utilisateur (ignorer mon utilisation de variables personnalisées par rapport à celles standard, j’ai beaucoup de requêtes des utilisateurs vont sur cette page et je voulais juste m'assurer que je ne causais pas de conflit).

Ensuite, dans ma requête de recherche, j'ai ajouté une requête supplémentaire ...

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

Et ma recherche fonctionne pour les trois, John, Doe et John Doe.

0
Faye