WordPress ist gut im Filtern!
Wer seine Beiträge über eine WordPress Instanz sortiert anzeigen und dadurch filterbar machen möchte, kommt über die eingebauten Kategorien und Schlagwörter schnell ans Ziel.
Aber wenn mir die übliche Filterung von WordPress nicht mehr ausreicht, welche Möglichkeiten habe ich, eigene Filterregeln aufzustellen? Und vor allem, wie baue ich die Datenstruktur auf, um so effizient wie möglich zu filtern?
Custom Fields als Alternative!
Eine interessante Möglichkeit dabei ist die Filterung mittels Custom Fields.
Um auf alle Werte zu kommen, die ich bei meinen Posts angehängt haben, führe ich vor jedem Filterdurchgang eine WP_Query durch und baue mir ein Array mit den Werten aus den Custom Fields zusammen.
Diese werden im Anschluss sortiert und Doppeleinträge werden entfernt. Dadurch erhalte ich eine Liste mit Werten, die auf ein paar Posts zutreffen. Wenn ich im Anschluss danach filtere, erhalte ich exakte Ergebnisse.
Damit kann ich recht schnell eine Filterung aufbauen, die immer nur die gerade möglichen Daten zur Auswahl ausgibt.
Somit bekomme ich keine Werte, zu denen es gerade keinen Eintrag gibt.
Das erlaubt mir einen fortlaufenden Filtervorgang, bei dem ich von einer riesigen Menge über mehrere Stationen zu einem einzigen Ergebnis kommen kann.
Der Sinn? Als Beispiel wurden Models als Custom Post Type angelegt.
Die Models haben gewisse Attribute, wie Haarfarbe und Alter. Nach diesen Eigenschaften möchte ich nun im Frontend filtern. Um das zu erreichen, muss ich die Daten irgendwie eingeben, was zb mit ACF sehr gut funktioniert!
Doch der Vorteil dieser Methode kann mir auch ganz schnell zum Nachteil gereichen.
Immerhin werden bei jedem Filtervorgang die ganzen Beiträge durchsucht. Dies ist natürlich recht rechenintensiv für unseren Server und kann Wartezeiten für den Besucher erzeugen.
Ein anderes Problem dabei ist der „pre_get_posts“ Hook, die diese Filterung wiederum aushebeln könnte und daher mit besonderer Sorgfalt verwendet werden sollte. Sofern sie überhaupt benötigt wird. Aber das gilt ohnehin für jeden Hook, mit dem wir in eine bestehende Query eingreifen.
Taxonomien
Die einfachere und sichere Methode, wenn auch nicht so mächtig, ist die Verwendung der bereits erwähnten Kategorien/Schlagwörter – sprich Taxonomien.
Diese bieten dank WordPress bereits ein fertiges Benutzerinterface an. Somit spare ich mir auch die WP_Query und ich kann viel direkter auf die Filter eingehen.
Weil Taxonomien unabhängig von der WP_Query sind, laufe ich nicht in Gefahr, mit der „pre_get_posts“ Action in die Quere zu kommen.
Der Nachteil an dieser Methode ist, dass ich eben stets die gleichen Werte in meiner Filterung habe. Es besteht lediglich die Option, dass ich Terms ausblende, die noch nie einem Post zugeteilt wurden.
Weiterführende Informationen:
- https://www.wp-entwickler.at/anzahl-der-angezeigten-verwendeten-posts-aendern-ein-problem-viele-loesungsmoeglichhkeiten/
- https://codex.wordpress.org/Class_Reference/WP_Query
- https://codex.wordpress.org/Custom_Fields
- https://codex.wordpress.org/Taxonomies
- https://developer.wordpress.org/reference/hooks/pre_get_posts/