1. Herzlich willkommen bei WPDE.org, dem grössten und ältesten deutschsprachigen Community-Forum rund um das Thema WordPress. Du musst angemeldet oder registriert sein, um Beiträge verfassen zu können.
    Information ausblenden

Conditional Tags mit eval prüfen

Dieses Thema im Forum "Plugins und Widgets" wurde erstellt von Azrael_0815, 5. Dezember 2017.

  1. Azrael_0815

    Azrael_0815 Well-Known Member

    Registriert seit:
    7. Juli 2015
    Beiträge:
    591
    Zustimmungen:
    35
    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. danielgoehr

    danielgoehr Well-Known Member

    Registriert seit:
    13. Juli 2016
    Beiträge:
    2.674
    Zustimmungen:
    128
    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.
     
    #2 danielgoehr, 5. Dezember 2017
    Zuletzt bearbeitet: 5. Dezember 2017
  3. Azrael_0815

    Azrael_0815 Well-Known Member

    Registriert seit:
    7. Juli 2015
    Beiträge:
    591
    Zustimmungen:
    35
    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.
     
    #3 Azrael_0815, 5. Dezember 2017
    Zuletzt bearbeitet: 5. Dezember 2017
  4. danielgoehr

    danielgoehr Well-Known Member

    Registriert seit:
    13. Juli 2016
    Beiträge:
    2.674
    Zustimmungen:
    128
    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. danielgoehr

    danielgoehr Well-Known Member

    Registriert seit:
    13. Juli 2016
    Beiträge:
    2.674
    Zustimmungen:
    128
  6. Azrael_0815

    Azrael_0815 Well-Known Member

    Registriert seit:
    7. Juli 2015
    Beiträge:
    591
    Zustimmungen:
    35
    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. danielgoehr

    danielgoehr Well-Known Member

    Registriert seit:
    13. Juli 2016
    Beiträge:
    2.674
    Zustimmungen:
    128
    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. Azrael_0815

    Azrael_0815 Well-Known Member

    Registriert seit:
    7. Juli 2015
    Beiträge:
    591
    Zustimmungen:
    35
    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. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.636
    Zustimmungen:
    1.778
    Was genau verstehst Du unter is_page(2) ? Die Seite mit der id=2 oder die zweite Seite einer Auflistung bzw. "Pagination"?
     
  10. Azrael_0815

    Azrael_0815 Well-Known Member

    Registriert seit:
    7. Juli 2015
    Beiträge:
    591
    Zustimmungen:
    35
    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.
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden