WordPress Posts und Taxonomies

WordPress: wp_set_object_terms und zwei Kuriositäten aus der Praxis

WordPress bietet für die programmatische Zuweisung von Taxonomien zu einem Post — etwa einem Bild — eine praktische Funktion:

wp_set_object_terms()

So hilfreich sie ist, so hat sie doch ein paar Tücken.
Zum einen prüft die Funktion nicht, ob zwischen dem Post und dem Term bereits eine Relation besteht. Das ist bekannt und wird auch in der WordPress‑Entwicklerdokumentation beschrieben.

In der Praxis gibt es jedoch zwei weitere Kuriositäten, über die man leicht stolpert.

1. Mehrere Terms nacheinander setzen? Vorsicht.

Wenn man versucht, mehrere Terms nacheinander einzeln zuzuweisen — also nicht als Array, sondern in mehreren Funktionsaufrufen — landet am Ende nur eine einzige Relation in der Datenbank.
Hat man drei Terms, verschwinden zwei davon einfach.

Lösung


Alle Terms in ein Array packen und dieses Array an wp_set_object_terms() übergeben.
Nur dann werden alle Relationen korrekt berücksichtigt.

2. Typisierung der Term‑IDs ist entscheidend

Ein weiteres Problem betrifft die Typisierung der übergebenen Werte.
Wenn man Term‑IDs nicht explizit typisiert, kann es passieren, dass WordPress einige Werte als Strings interpretiert — mit entsprechend unerwarteten Ergebnissen.

Beispiel

(int)$term_id

oder beim Befüllen eines Arrays:

array_push($term_ids, (int)$term_id);

Ohne diese Typisierung kann WordPress intern durcheinanderkommen, weil nicht sauber geprüft wird, was tatsächlich in $term_id steckt.

Fazit

Mit diesen beiden Vorsichtsmaßnahmen — Terms immer als Array übergeben und IDs sauber typisieren — verhält sich wp_set_object_terms() so, wie man es erwarten würde.

Dass WordPress an dieser Stelle so wenig prüft, ist allerdings bemerkenswert.


Vielleicht ergibt sich irgendwann die Gelegenheit, auszuprobieren, was passiert, wenn man der Funktion bewusst „unsaubere“ Strings übergibt…

  • WordPress Plugins II: Ich klick mir die Welt

    WordPress (und auch andere CMS) sind verlockend: Schnell installiert, schnell mit Plugins erweitert und schnell online im Netz. Es ist aber leider etwas mehr als ein Pippi Langstrumpf Abenteuer bei dem 3×3 = 6 ergibt…

  • WordPress Performance: Warum zu viele Plugins deine Seite ausbremsen

    WordPress erfreut sich seit Jahren großer Beliebtheit – trotz oder vielleicht gerade wegen seines Alters. Heute wird damit fast alles gebaut: vom persönlichen Blog über Vereinsseiten bis hin zu ausgewachsenen Shopsystemen. Ursprünglich war WordPress aber eine reine Blogsoftware. Viele WordPress‑Seiten werden langsam, weil zu viele Plugins geladen werden – oft ohne dass Betreiber es merken.…

  • PHP Warum truthy Prüfungen nicht immer wahr sind

    In PHP – wie natürlich auch in anderen Programmiersprachen – gibt es verkürzte truthy-Prüfungen. Ob, wie und wann man sie einsetzt muss aber genau überlegt sein. Das hilft am Ende nicht nur der Lesbarkeit sondern vermeidet auch Bugs, die auf Grund falsch gedachter oder vermeintlich logischer Prüfungen aufkommen.

  • HTTP 500: Fehler – nur welcher?

    Neulich haben wir schon über den Unterschied zwischen 401 und 403 gesprochen. Jetzt wollen wir weiterschauen: der HTTP Code 500 ist ein weiterer häufiger Kandidat – und verhält sich „mysteriös“. Teilweise ist das aber auch gut so.

  • PHPUnit-Tests: Wenn ein roter Test ein Erfolg ist

    Ein roter PHPUnit‑Test bedeutet nicht automatisch, dass etwas kaputt ist. Manchmal zeigt er sogar, dass alles genau so funktioniert, wie es soll – zum Beispiel, wenn eine neue Auth‑Schicht greift. Ein kleiner Einblick in unsere modulare Vorgehensweise und warum ‚rot‘ nicht immer schlecht ist.

Kommentare

Kommentar verfassen