web-dev-qa-db-de.com

Kombinieren von Meta_Query-Schlüsselwerten für ein Array

Ich habe eine Situation, in der meine Suche funktioniert, aber der Kunde kam gerade mit einer Anfrage, die ich nicht berücksichtigt hatte. Wenn Sie nach Vorname (z. B. John) oder Nachname (z. B. Doe) suchen, wird dies auf jeden Fall Ihr Ergebnis bringen. Wenn Sie jedoch nach ihrem vollständigen Namen suchen (z. B. john doe), erhalten Sie 0 Ergebnisse.

Ich habe mich umgesehen, aber anscheinend kann ich die Suche nicht mit "Vorname Nachname" vergleichen.

Ich habe die ähnlichen Fragen im Forum durchgesehen, aber sie helfen nicht/scheinen in eine ganz andere Richtung zu gehen. Wenn jemand etwas weiß oder mich auf den richtigen Thread hinweisen kann, wäre ich dankbar.

Hier ist die Zusammenfassung meines Codes:

$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

Was ist, wenn Sie den Operator IN verwenden und den Suchbegriff in ein Wortarray aufteilen:

$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

Ich ging in die Hocke und löste das heute. Die Hoffnung auf meinen Erfolg wird allen anderen im selben Boot helfen.

Da das Meta-Abfrage-Array einen echten meta_key benötigt, müssen Sie tatsächlich einen für den Benutzer erstellen und ihn mit den Informationen füllen, die Sie übergeben möchten. Weitere Informationen finden Sie in der Funktion add_user_meta .

Bevor ich meine Suche durchführe, habe ich Folgendes:

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


}
?>

Hier habe ich alle Benutzer angerufen und dann für sie alle neuen Meta-Benutzer mit meinem benutzerdefinierten Wert definiert, der sowohl den Vor- als auch den Nachnamen des Benutzers enthält (ignoriere meine Verwendung von benutzerdefinierten Variablen gegenüber den Standard-Variablen, die ich habe) Viele Benutzeranfragen gehen auf diese Seite und wollten nur sicherstellen, dass ich keine Konflikte verursache.

Dann habe ich unten in meiner Suchanfrage noch eine Abfrage hinzugefügt ...

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

Und das hat meine Suche für alle drei, John, Doe und John Doe funktioniert.

0
Faye