Conditional Tags mit eval prüfen
-
-
- Gerade eben
- 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)
-
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. -
-
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.
[ATTACH=CONFIG]18014[/ATTACH]Die Beispielseite sollte eigentlich bei is_page(2) wahr liefern. Keine Ahnung, was eval da tut:
[ATTACH=CONFIG]18015[/ATTACH]
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.
-
Übrigens:
Jenachdem, wo $conditional herkommt unbedingt den Hinweis von b3317133 in diesem Thread berücksichtigen:http://forum.wpde.org/plugins-und-wi…html#post740469
Ggf. ist es absolut notwendig, zu prüfen, was da in $conditional enthalten ist und im Zweifelsfall die Ausführung abbrechen.
Eval ist evil ;)
-
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? -
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.
-
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. -
Was genau verstehst Du unter is_page(2) ? Die Seite mit der id=2 oder die zweite Seite einer Auflistung bzw. "Pagination"?
-
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.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!