Für ein Kundenprojekt auf einer WordPress-Multisite und mit einer sehr großen Anzahl an Einträgen, die aus einer Warenwirtschaft gespeißt werden, sollten im Frontend bestimmte Post-Metadaten formatiert werden ohne das bei jeder einzelnen Ausgabe im Frontend über das richtige Format nachgedacht werden muss.

Zum Beispiel können Entfernungen oder Gewichte mit ihren Einheiten versehen werden.
Datenbank: „5“
Frontend: „5 kg“ oder „5,00 kg“

Das Problem

Um einen eigenen Formatierungs-Helfer zu vermeiden war meine Idee, dann filtern wir doch einfach den Wert unmittelbar bevor er von der get_post_meta() Funktion zurück gegeben wird. Pech gehabt. In der Funktion und allen weiteren Funktionen die sie aufruft gibt es nur einen relevanten Filter: get_{$meta_type}_metadata

Dieser dient eigentlich dazu zu prüfen ob der aktuelle Benutzer einen Postmeta Wert überhaupt auslesen darf und im negativen Fall eine Alternative zurück zu liefern.

In dem Moment wo diese Prüfung ausgeführt wird „kennt“ das Programm den Postmeta-Wert noch nicht. Ist somit nicht Teil der Parameter von apply_filters().

Fügt man einen eigenen Filter an der Stelle hinzu kann man wierderum get_post_meta() aufrufen. Aber dann landed man direkt wieder in dem selben eigenen Filter und somit in einer Endlosschleife.