WPQuery mit mehreren OR Abfragen

  • Moin zusammen,

    ich brauche mal bitte eure Hilfe. Nach längerem suchen im Netz bin ich immer noch nicht auf eine Lösung gestoßen. Vielleicht suche ich falsch? Wer weiß ^^

    Es geht um folgendes Problem:

    Ich habe einen Custom-Post-Type "Bilder"

    Jeder Post hat

    a) eine Checkbox die für die Freigabe bzw. Archivierung da ist > also Checkbox aktiviert = "ja" Post gesperrt, deaktiviert = "" Post darf verwendet werden
    b) ein Typ auswahlfeld also z.B. großes Bild, kleines Bild, Testbild
    c) 7 Advanced-Custom-Fields (Textfelder) Farbe1 - Farbe7 die einen Farbcode beinhalten z.B. ff0000

    Per WP-Query möchte ich nun alle Posts von "Bilder" ausgeben, die

    1. Freigegeben sind (a)

    2. vom Typ ein großes Bild sind (b)

    3. den gesuchten String z.B. ff0000 im Custom-Field "Farbe1" haben OR
    den gesuchten String z.B. ff0000 im Custom-Field "Farbe2" haben OR
    den gesuchten String z.B. ff0000 im Custom-Field "Farbe3" haben OR
    den gesuchten String z.B. ff0000 im Custom-Field "Farbe4" haben OR
    etc bis Farbe 7 (c)

    Mein Aktueller Code sieht aktuell so aus:

    PHP
    'meta_query' => array(                                                                                                                            array(            'key' => 'aktiv', // (a)             'value' => '"ja"', //             'compare' => 'NOT LIKE'    )    
            array(        'key' => 'typ', // (b)         'value' => '127', // ID des CPT "Typen" -> großes Bild        'compare' => 'LIKE'    ),
            array(        'key' => 'farbe1', // (c)         'value' => '$suchstring', // z.B. ff0000        'compare' => 'LIKE'    ),)

    Jetzt werden mir alle Posts ausgegeben die (a), (b) und Farbe1 kompatibel sind, aber was ich nun nicht weiß, wie frage ich auch alle anderen Farbfelder ab?

    Ich hoffe ihr habt einen Denkanstoß für mich !

    Vielen Dank und viele Grüße
    David

    • 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

  • Da diese Forumsoftware hier echt Probleme mit Darstellungen hat hier nochmal der Code:

  • Der Ansatz wäre so (das letzte Array ersetzen durch das folgende):

  • Der Ansatz wäre so (das letzte Array ersetzen durch das folgende):

    Hallo spickzettel,

    vielen Dank für deine Antwort! Diesen Ansatz hatte ich auch schon verfolgt, leider kommt es an am Ende immer zu einer Dauerschleife und der Server crasht worauf ich immer beim Support anrufen muss, damit die Damen und Herren den Server neu starten.

    Das Problem liegt dann wohl an den weiteren Abhängigkeiten denn es müsse ja ebenfalls noch

    PHP
    array(         'key' => 'aktiv', // (a)          'value' => '"ja"', //          'compare' => 'NOT LIKE'    ),        array(        'key' => 'typ', // (b)         'value' => '127', // ID des CPT "Typen" -> großes Bild        'compare' => 'LIKE'    ),

    angefügt werden und dann wäre, so wie ich das verstehe die Abfrage

    Wenn
    Farbe1
    oder Farbe2 etc.
    oder aktiv == ja
    oder typ LIKE "127"

    aber es muss so laufen:

    wenn
    Farbe1 und aktiv == ja und typ LIKE "127"
    oder
    Farbe2 und aktiv == ja und typ LIKE "127"
    oder
    Farbe3 und aktiv == ja und typ LIKE "127"
    oder
    Farbe4 und aktiv == ja und typ LIKE "127"
    oder
    Farbe5 und aktiv == ja und typ LIKE "127"
    etc....

    Und hier liegt das Problem diese geschachtelten OR Abfragen bringen den Server immer zum crashen :(

    Hast du eine Idee?

  • Schau Dir mal in der WordPress meta_query Dokumentation die Beispiele an, dort sieht man schön, wie man 'OR' benutzt und ebenso wie eine 'verschachtelte' Abfrage funktioniert.

    Hallo b3317133,

    vielen Dank für deine Antwort! Die Dokumentation habe ich schon seit Tagen immer wieder offen, aber die gezeigten Beispiele sind leider nicht die Lösung zu meinem benötigtem Aufbau :(

    Laut Doku:

    ich brauche aber OR 7 mal und da crasht dann der Server.

    Hast du eine Idee?

  • Ok gern

    So führt der Code zum Crash.
    Siehst du etwas Falsches im Code?


  • ich brauche aber OR 7 mal und da crasht dann der Server.

    Hast du eine Idee?

    Wie äussert sich denn dieser Crash? Was ist denn das für ein Server und bei welchem Anbieter?
    Irgendwie irritiert es mich, dass diese (relative simple) Query in WP den Server "crashen" soll.



    So führt der Code zum Crash.
    Siehst du etwas Falsches im Code?

    Ich persönlich würde den Code etwas zusammenfassen. Du musst ja eigentlich nicht jedes mal die Abfrage nach "typ" und "aktiv" machen. Es reicht ja, das einmal zur Bedingung zu machen und den Rest dann mit AND/OR zu verknüpfen. Also so ungefähr:

    Das ist aber nicht die Ursache des Crashs.

    Was mir in deinem Code noch auffällt:
    Jeweils hinter Farbe verwendest du das falsche Anführungszeichen.

  • Bitte den kompletten Code des WP_Query, nicht nur einen Teil der Parameter.

    Die Erfahrung bei der aktuellen "Wissenstiefe" zeigt, dass neben Syntaxfehlern, wie bereits von danielgoehr angemerkt, oft auch noch weitere Probleme vorhanden sind.

  • Moin danielgoehr,

    danke für deinen Tipp und deinen Hinweis.

    Der Code den ich gepostet habe, ist etwas abgewandelt, da meine custom fields und
    value-variablen längere Namen haben und ich hier aber übersichtlicher schreiben wollte.

    Warum das Anführungszeichen anders ist, kann ich mir nicht erklären ist wahrscheinlich beim Umändern der Variablen-Namen passiert und dann habe ich das durch copy&paste wiederholt falsch eingefügt.

    Deinen Tipp mit der Zusammenfassung übernehme ich sehr gern! Vielleicht war das ja auch schon das Problem, sodass der Server gecrasht ist, da er zu oft die gleichen Dinge abgefragt hat? Ich weiß es aber nicht.

    Zu deiner Frage "[COLOR=#333333]Wie äussert sich denn dieser Crash? Was ist denn das für ein Server und bei welchem Anbieter?"

    Sobald ich die Webseite aufrufe geht nichts mehr. Sie lädt und lädt und lädt nach mehreren Minuten immer noch. Dann irgendwann kommt ab und zu ein "Seite kann nicht angezeigt werden".
    Ab und zu steht unten links im Chrome "warte auf Socket".

    Die einzige Lösung ist dann bei All-Inkl (dem Hoster) anzurufen und die zu bitten den Server neu zu starten. Wobei die dort immer von einem Dienstneustart sprechen. Da es einen Unendlich-Loop in der Datenbankabfrage gibt. So meinte es zumindest der Support.

    Mittlerweile ist es schon echt nervig, da nach jeder Änderung die NICHT funktioniert ein erneutes Telefonat stattfinden muss und so ist try & error natürlich nicht wirklich möglich bzw. das große Rätseln angesagt.

    [/COLOR]

  • Moin b3317133,

    der Synthaxfehler war nur ein Versehen beim Umbenennen der Variablen für den Code hier im Forum (Näheres dazu habe ich in der letzen Antwort an danielgoehr beschrieben).

    Hier nochmal der gesamte Code:

    Einmal editiert, zuletzt von DavidK (21. Juni 2017 um 23:28)

  • [COLOR=#333333]danielgoehr ich weiß zwar nicht warum es jetzt geht, aber du bist definitiv mein Held des Tages!

    Vielen DANK! [/COLOR]:-o

Jetzt mitmachen!

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