Status: Lösung im Einsatz
Betroffen: Elementor Pro Loop Grid + Taxonomy Filter
Lösung: Custom Plugin „image² Elementor Loop Filter Fix“
Hintergrund
Beim Einsatz des Elementor Taxonomy Filters mit Loop Grids können zwei voneinander
unabhängige Fehler auftreten. Beide liegen in Elementor Pro und können dazu führen,
dass hierarchische Taxonomien nicht korrekt gefiltert werden.
Das Custom Plugin image² Elementor Loop Filter Fix enthält für beide
Fehler kontrollierte Patches. Elementor-Pro-Dateien werden nicht automatisch verändert.
Jeder Patch wird nur angeboten, wenn der jeweils bekannte Elementor-Code eindeutig
erkannt wurde.
Fehler 1: Unterkategorien fehlen im Taxonomy Filter
Fehlerbild
Ein Loop Grid wird über die Query auf einen übergeordneten Taxonomie-Begriff
eingeschränkt. Die Option „Unterbegriffe einbeziehen“ ist aktiviert.
Das Loop Grid selbst zeigt Beiträge aus den Unterkategorien korrekt an. Im zugehörigen
Taxonomy Filter fehlen im Frontend jedoch die Unterkategorien. Im Elementor-Editor
können sie trotzdem korrekt erscheinen.
Beispiel
- Straßenbau
- Autobahnen
- Landesstraßen
- Gemeindestraßen
Das Loop Grid ist auf „Straßenbau“ eingeschränkt und „Unterbegriffe einbeziehen“
ist aktiviert. Die entsprechenden Projekte erscheinen im Grid, die Unterkategorien
werden im Taxonomy Filter jedoch nicht korrekt angeboten.
Ursache
Die Ursache liegt in
elementor-pro/modules/loop-filter/module.php
in der Methode
is_term_not_selected_for_inclusion().
Elementor berücksichtigt dort die Nachfahren eines ausgewählten Parent-Terms nicht
korrekt. Zusätzlich müssen die von Elementor gespeicherten IDs in diesem Zusammenhang
als term_taxonomy_id behandelt werden. Die WordPress-Funktion zur Ermittlung
der übergeordneten Begriffe arbeitet dagegen mit der normalen term_id.
Dadurch kann Elementor einen Child-Term aus dem Filter entfernen, obwohl dessen
Parent-Term in der Loop-Grid-Query ausgewählt wurde und „Unterbegriffe einbeziehen“
aktiviert ist.
Lösung
Der Taxonomy Children Fix im Plugin berücksichtigt die Hierarchie
der Taxonomie und vergleicht die betreffenden Parent-Terms korrekt über deren
term_taxonomy_id.
Fehler 2: Filter reagiert, filtert aber nicht
Fehlerbild
Der Taxonomy Filter wird im Frontend korrekt angezeigt. Beim Klick auf einen Begriff
reagiert der Filter ebenfalls: Der ausgewählte Begriff wird aktiv dargestellt und
in die URL übernommen. Das Loop Grid wird jedoch nicht aktualisiert und zeigt
weiterhin alle bisherigen Einträge.
In den Entwicklerwerkzeugen des Browsers ist beim Klick ein fehlgeschlagener
refresh-loop-Request mit HTTP-Status 400 zu sehen.
Die REST-Antwort lautet sinngemäß:
code: rest_invalid_param
message: Ungültige(r) Parameter: widget_id
widget_id: Der Parameter ist ungültig.Ursache
Die Ursache liegt in
elementor-pro/core/data/endpoints/refresh-base.php
in der Methode is_widget_id_valid().
Elementor Pro prüft dort die übermittelte Widget-ID unter anderem mit:
&& strlen( $widget_id ) === 7;Damit akzeptiert der REST-Endpunkt ausschließlich Widget-IDs mit exakt sieben Zeichen.
Elementor selbst kann jedoch auch achtstellige Widget-IDs erzeugen.
Beispiel einer tatsächlich von Elementor erzeugten Loop-Grid-ID:
10f5792eDiese ID wird im Frontend korrekt als data-id ausgegeben und beim
refresh-loop-Request korrekt als widget_id übertragen.
Der Elementor-Pro-Endpunkt lehnt die eigene achtstellige ID anschließend trotzdem
als ungültig ab.
Der Request erreicht dadurch die eigentliche Filterlogik gar nicht. Das vorhandene
Loop Grid bleibt unverändert stehen, wodurch zunächst der Eindruck entsteht, dass
der Taxonomy Filter zwar lädt, aber einfach alle Beiträge zurückliefert.
Lösung
Der Widget ID Fix erweitert die bestehende Elementor-Prüfung so,
dass sowohl sieben- als auch achtstellige Widget-IDs akzeptiert werden.
Die Prüfung wird geändert von:
&& strlen( $widget_id ) === 7;auf:
&& in_array( strlen( $widget_id ), [ 7, 8 ], true );Die bestehende Prüfung auf ausschließlich alphanumerische Zeichen bleibt erhalten.
Custom Plugin: image² Elementor Loop Filter Fix
Beide Fehler werden über das Custom Plugin
image² Elementor Loop Filter Fix behandelt.
Das Plugin enthält zwei voneinander unabhängige Patches:
- Taxonomy Children Fix: zeigt Child-Taxonomien korrekt im Filter an.
- Widget ID Fix: erlaubt auch achtstellige Elementor-Widget-IDs beim AJAX-Refresh.
Die Patches werden bewusst getrennt geprüft. Dadurch kann beispielsweise nach einem
Elementor-Pro-Update ein Fehler bereits von Elementor behoben sein, während der andere
Patch weiterhin erforderlich ist.
Patch anwenden
- Plugin „image² Elementor Loop Filter Fix“ installieren und aktivieren.
- Zu Werkzeuge → Elementor Loop Filter Fix wechseln.
- Status beider Patches kontrollieren.
- Bei „Bekannter Elementor-Code erkannt“ den jeweiligen Patch anwenden.
- Frontend anschließend testen.
Ein Patch wird nur angeboten, wenn der bekannte Elementor-Code eindeutig erkannt
wurde. Bei verändertem oder unbekanntem Code nimmt das Plugin keine Änderung vor.
Nach Elementor-Pro-Updates
Elementor-Pro-Updates überschreiben die gepatchten Plugin-Dateien. Nach jedem
Elementor-Pro-Update daher unter
Werkzeuge → Elementor Loop Filter Fix
den Status beider Patches kontrollieren.
Mögliche Zustände:
- Patch ist aktiv: Die image² Änderung ist vorhanden.
- Patch kann angewendet werden: Elementor hat den bekannten fehlerhaften Originalcode wiederhergestellt.
- Unbekannter Code: Elementor hat die betreffende Stelle verändert. Nicht patchen, sondern zuerst prüfen, ob der Fehler von Elementor behoben wurde.
Fehlersuche bei nicht funktionierendem Taxonomy Filter
Wenn ein Elementor Taxonomy Filter Probleme macht, zuerst unterscheiden, welches
Fehlerbild vorliegt.
Unterkategorien fehlen bereits im Filter:
Status des Taxonomy Children Fix prüfen.
Unterkategorien sind vorhanden, Klick filtert aber nicht:
Browser-Entwicklerwerkzeuge öffnen und unter „Netzwerk“ den
refresh-loop-Request kontrollieren.
Bei HTTP 400 mit rest_invalid_param für widget_id
die Länge der Widget-ID prüfen. Bei einer achtstelligen ID den Status des
Widget ID Fix kontrollieren.
Zusätzliche CSS-Lösung: Filter mit nur einem Eintrag ausblenden
Enthält ein Taxonomy Filter lediglich einen einzigen Button, kann der komplette
Filter ausgeblendet werden.
.i2-child-filter:has(.e-filter-item:only-child) {
display: none;
}Dazu dem Taxonomy-Filter-Widget in Elementor die CSS-Klasse
i2-child-filter geben.
Wichtig
Die beiden Fehler sehen im Frontend ähnlich aus, haben aber unterschiedliche Ursachen.
Beim ersten Fehler entscheidet Elementor falsch, welche Taxonomie-Begriffe im Filter
angezeigt werden. Beim zweiten Fehler funktioniert die Anzeige korrekt, aber der
anschließende AJAX-Request wird bereits bei der Validierung der Widget-ID abgelehnt.
Daher bei Problemen nicht sofort Loop Grid, Query oder Taxonomie umbauen. Zuerst
prüfen, ob einer dieser beiden bekannten Elementor-Pro-Fehler vorliegt.