Es wurde versucht, eine Suche zu erstellen, die nicht nur die Standardeinstellungen (Titel, Inhalt usw.) durchsucht, sondern auch ein bestimmtes benutzerdefiniertes Feld.
Meine aktuelle Anfrage:
$args = array(
'post_type' => 'post',
's' => $query,
'meta_query' => array(
array(
'key' => 'speel',
'value' => $query,
'compare' => 'LIKE'
)
)
);
$search = new WP_Query( $args )
...
Dies gibt Beiträge zurück, die sowohl der Suchabfrage als auch der Metaabfrage entsprechen, aber ich möchte auch, dass Beiträge zurückgegeben werden, bei denen einfach einer von beiden übereinstimmt.
Irgendwelche Ideen?
Antworten:
Ich habe stundenlang nach einer Lösung für dieses Problem gesucht. Das Zusammenführen von Arrays ist nicht der richtige Weg, insbesondere wenn die Abfragen komplex sind und Sie in Zukunft in der Lage sein müssen, Metaabfragen hinzuzufügen. Die einfach schöne Lösung besteht darin, 's' in eine zu ändern, mit der sowohl nach Titeln als auch nach Metafeldern gesucht werden kann.
Verwendung:
quelle
Mit einer geänderten Version dieser Antwort kann viel Code reduziert werden .
quelle
$result->post_count = count( $result->posts );
weil ich sonst nur 1 Ergebnis erhielt.Ich habe @Stabir Kira Antwort ein wenig optimiert
Jetzt können Sie nach (Titel, Inhalt, Auszug) oder (Metafeld) oder (beiden) suchen.
quelle
Wie pro Nick Perkins' Vorschlag, hatte ich zwei Abfragen zu fusionieren , wie so:
quelle
Nun, es ist eine Art Hack, aber es funktioniert. Sie müssen den Filter posts_clauses hinzufügen. Diese Filterfunktionsprüfung für ein beliebiges Abfragewort ist im benutzerdefinierten Feld "speel" vorhanden, und die verbleibende Abfrage bleibt erhalten.
quelle
ich hatte das gleiche problem, für meine neue website habe ich gerade einen neuen meta "title" hinzugefügt:
functions.php
Und dann ... füge einfach so etwas hinzu:
Was halten Sie von dieser Problemumgehung?
quelle
Alle oben genannten Lösungen geben nur dann Ergebnisse zurück, wenn im Speel-Metaschlüssel eine Übereinstimmung vorliegt. Wenn Sie Ergebnisse an anderer Stelle haben, jedoch nicht in diesem Bereich, erhalten Sie nichts. Niemand will das.
Ein linker Join ist erforderlich. Im Folgenden wird eine erstellt.
quelle
Dies ist eine großartige Lösung, aber Sie müssen eine Sache beheben. Wenn Sie 'post__in' aufrufen, müssen Sie ein Array von IDs festlegen, und $ unique ist ein Array von Posts.
Beispiel:
quelle
@ satbir-kira Antwort funktioniert gut, aber es wird nur durch die Meta-und Post-Titel suchen. Wenn Sie möchten, dass Meta, Titel und Inhalt durchsucht werden, finden Sie hier die geänderte Version.
Und hier ist seine Verwendung:
Ersetzen Sie
$get['search']
durch Ihren Suchwertquelle