Advanced Custom Fields / meta_query Problem

  • Hallo,

    ich baue für ein Lernprojekt ein Immobilienportal auf, habe einen custom post type "immobilie" und nutze Advanced Custom Fields, um Informationen wie den Kaufpreis der Immobilie abzubilden.

    Wenn ich die WP_Query wie unten abgebildet ausführe und nur die Variablen $cat und §ort befülle, liefert die Query korrekte Ergebnisse. Wenn ich jedoch zusätzlich die Variable $preis_bis befülle mit einem Preis der ÜBER dem Kaufpreis der Immobilie liegt, wird zwar ein Ergebnis angezeigt und wenn ich $preis_bis niedriger eingebe, keines. Soweit so richtig. Wenn ich $preis_bis aber mit "9" befülle, wird die Immobilie ausgegeben. Gebe ich "1" ein -> kein Ergebnis. Die Variablen werden per Formular GET Methode an die Seite übermittelt. Ich habe schon versucht den Kaufpreis in php als (int) zu casten, kein Unterschied.

    Kann dies daran liegen, dass ich in acf das Kaufpreis-Feld erst als "Text einzeilig" angegeben habe und später (nach Eingeben der Immobilien im Backend) das Feld auf "Nummerisch" umgestellt habe?

    Andere mögliche Fehlerquelle: ich habe mehrere Feldgruppen in acf, je nach Kategorie der Immobilie. Diese enthalten das Feld "Kaufpreis" jeweils 1x.
    Ausserdem macht mich derzeit in acf stutzig, dass ich ein Feld mit der exakt selben Feldbezeichnung innerhalb einer Feldgruppe mehrfach anlegen kann, das scheint mir inkonsistent zu sein.
    Bin für jeden Tipp dankbar!

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Eigentlich müsste bei Kaufpreis der compare ">=" sein, hatte daran herumexperimentiert - es funktioniert jedoch so oder so nicht richtig!

  • Ich habe jetzt mal alle Feldgruppen gelöscht und nur "Ort" und "Kaufpreis" neu erstellt. Interessant ist dabei, dass die Feldinformationen für alle Felder in der _postmeta Tabelle erhalten bleiben. Nach Neuanlegen von "Kaufpreis" und Verknüpfen mit cpt Immobilie waren die Kaufpreise noch erhalten. Was ist da los mit ACF. Bug oder Feature?!

    Das Verhalten, dass die Immobilien bei einem Kaufpreis von "9" gefunden werden, hat sich nicht geändert. Diesmal habe ich "Kaufpreis" von vornherein als Nummerisch angelegt.

    Auch mit einem ganz neuen Feld "kaufpreis_neu" werden Immobilien weiter bei einem $preis_bis-Wert von 9 gefunden, bei 1 jedoch nicht. Liegt es doch an meiner Meta-Query?! Ich kann da aber keinen Fehler finden.

  • Ohne den Code selbst debuggen zu können ist es schwierig hier zu helfen. Aber kann es sein, dass du den Kaufpreis als String hinterlegst und deine Meta-Query deshalb nicht Zahlen, sondern Strings vergleicht?

  • Danke für die Antwort. Es kommt mir auch so vor, als würde da etwas als String verglichen.
    Das testweise neue Feld kaufpreis_neu habe ich aber von Anfang an als Nummerisch in ACF angelegt.

    Zudem caste ich den Inhalt der Variablen $preis_bis als (int).

    PHP
    $preis_bis = (int)$_GET["preis_bis"];

    Keine Strings also.

  • Hier mal mein gesamter Code für die Suchergebnisseite. Ich verwende aktuell nur die Kategorie "Haus kaufen":

  • https://developer.wordpress.org/reference/classes/wp_meta_query/

    Ohne Angabe von 'type' findet immer ein String Vergleich statt.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • ACF ist doch super, ich nehm alles zurück :) Dass die Infos noch in der DB waren hat sich als hilfreich erwiesen, beim Wiederanlegen der Feldgruppen. Schön wäre noch ein Feature bei ACF, dass es erlaubt die Daten endgültig aus der DB zu löschen, falls man es mal braucht. Danke für die Hilfe hier und schönen Gruß!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!