Weitere Informationen und den Download findest du auf der offiziellen Anlaufstelle de.wordpress.org
Ergebnis 1 bis 10 von 10
  1. #1
    PostRank: 4
    Registriert seit
    07.07.2015
    Beiträge
    188

    Conditional Tags mit eval prüfen

    screenshot_code.png
    Obiger Code soll mir mit eval ausgeben, ob ich mich auf einer Seite befinde, die ich in der DB angeben habe,
    Tut er aber nicht.

    Er gibt gar nix aus:
    screenshot_seite.png

    Warum nicht? Hab ich einen Fehler im PHP gemacht?


  2. #2
    PostRank: 10 Avatar von danielgoehr
    Registriert seit
    13.07.2016
    Ort
    Berlin
    Beiträge
    1.881
    Was genau ist denn $cond? Du gibst ja die Variable $cond als Return zurück, aber zumindest in deinem gezeigten Code wird diese Variable nirgendwo definiert, oder?

    Edit:
    Gib doch an der Stelle einfach mal einen String als Test zurück.
    Geändert von danielgoehr (05.12.2017 um 19:35 Uhr)

  3. #3
    PostRank: 4
    Registriert seit
    07.07.2015
    Beiträge
    188
    Nein, $cond soll nur als 1 zurückgegeben werden. mittlerweile habe ich eine Antwort, allerdings bekomme ich immer is_home als Antwort, auch auf Page 2.
    screen_1.png

    Die Beispielseite sollte eigentlich bei is_page(2) wahr liefern. Keine Ahnung, was eval da tut:

    screen_code2.png

    Bei is_category(1) stimmt es komischerweise.
    Geändert von Azrael_0815 (05.12.2017 um 19:50 Uhr)

  4. #4
    PostRank: 10 Avatar von danielgoehr
    Registriert seit
    13.07.2016
    Ort
    Berlin
    Beiträge
    1.881
    Zitat Zitat von Azrael_0815 Beitrag anzeigen
    Nein, $cond soll nur als 1 zurückgegeben werden. mittlerweile habe ich eine Antwort, allerdings bekomme ich immer is_home als Antwort, auch auf Page 2.
    screen_1.png

    Die Beispielseite sollte eigentlich bei is_page(2) wahr liefern. Keine Ahnung, was eval da tut:

    screen_code2.png

    Bei is_category(1) stimmt es komischerweise.
    Ich verstehe an deinem Code mehrere Dinge nicht. Aber es ist natürlich auch schwer, etwas dazu zu sagen, wenn man nur den kurzen Ausschnitt und kaum Kontext kennt.

    Müsste die untere Funktion nicht sinnvollerweise einen Boolean zurückgeben? Im Moment gibt sie ja die Bedingung bzw. das Conditional Tag zurück. Oder nichts. Ist das so gewollt?

    Warum gibt es oben den "break"? Es können ja auch mehrere Bedingungen zutreffen...

    Mach doch mal in der oberen Funktionen einen var_dump von $logic um zu sehen, ob $logic überhaupt einen Wert enthält, den du erwartest. Weil in deinem vorherigen Beitrag schreibst du ja, dass 1 zurückgegeben werden soll. Das kann ich mir aber schwer vorstellen, dass das so ist.

  5. #5
    PostRank: 10 Avatar von danielgoehr
    Registriert seit
    13.07.2016
    Ort
    Berlin
    Beiträge
    1.881
    Übrigens:
    Jenachdem, wo $conditional herkommt unbedingt den Hinweis von @b3317133 in diesem Thread berücksichtigen:

    Conditional Tags in Optionen?

    Ggf. ist es absolut notwendig, zu prüfen, was da in $conditional enthalten ist und im Zweifelsfall die Ausführung abbrechen.


    Eval ist evil

  6. #6
    PostRank: 4
    Registriert seit
    07.07.2015
    Beiträge
    188
    Die untere Funktion gibt ja einen Bolean zurück, nämlich true oder halt null. Soll sie jedenfalls Nur sie gibt den Boolean halt falsch zurück. Auf der Seite 2 zB gibt er zurück (var dump(logic)):

    is_search()|
    NULL |is_category(1)|
    NULL |is_page('2')|
    NULL |is_home()|
    1--is_home()bool(true)

    Ich will nur prüfen, ob meine Conditionals aus der DB stimmen, ich mich also dort befinde, was in der DB steht.
    Wie würdest Du das machen?

  7. #7
    PostRank: 10 Avatar von danielgoehr
    Registriert seit
    13.07.2016
    Ort
    Berlin
    Beiträge
    1.881
    Die untere Funktion gibt keinen Boolean zurück. Sondern entweder einen String ($conditional) oder null.

    Ich würde erstmal sicherstellen, dass die untere Funktion wirklich korrekt ist. Für mich sieht das aktuell nicht so aus. Ich verstehe auch nicht, wie sie true zurückgeben soll, wenn dein Rückgabewert ein String ist. Das was du willst bzw. beschreibst, würde dann stimmen, wenn dein Rückgabewert $logic wäre. Aber du gibst ja $conditional zurück. Und selbst dann würde ich lieber ein zusätzliches else ergänzen und wirklich false zurückgeben. True oder Null ist irgendwie ... Naja.

    Ansonsten kann man das generell schon mit eval() machen. Dann sollte man nur sicher stellen, dass $conditional nur die Conditional Tags enthalten darf. Wenn $conditional etwas anderes enthält, sollte man die Ausführung sicherheitshalber abbrechen.

    Ich persönlich würde den User Optionen (z.B. in Form von Checkboxen) zur Verfügung stellen, wo ich die möglichen Bedingungen vorgeben und dann die Conditional Tags im PHP Code prüfen. So kann der User keinen "Quatsch" eingeben und ich bin sicher, dass ich alle Fälle auch sauber prüfen kann. Zudem halte ich die Usability für besser.

  8. #8
    PostRank: 4
    Registriert seit
    07.07.2015
    Beiträge
    188
    Das kann eh nur der Admin machen - ich brauche nur eine Funktion, die mir sagt, ob ich mich zB auf einer is_page(2) oder auf is_search() befinde. Diese Tags liegen als Texte in der DB und werden alle abgefragt bzw. durchlaufen, bis true gefunden ist.
    Der Code oben ist eh net mehr aktuell Soll halt ein Filter sein, der je nach Seite andere Arrays zurückgibt.

  9. #9
    PostRank: 10 Avatar von b3317133
    Registriert seit
    21.11.2014
    Beiträge
    1.983
    Was genau verstehst Du unter is_page(2) ? Die Seite mit der id=2 oder die zweite Seite einer Auflistung bzw. "Pagination"?

  10. #10
    PostRank: 4
    Registriert seit
    07.07.2015
    Beiträge
    188
    Ich mache das jetzt so, wie Daniel vorgeschlagen hatte: Auswahl anhand von Conditional Tags und in PHP dann prüfen, ob ein CT vorliegt.
    Ich meinte die Seite mit ID 2.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •