WordPress: Custom Endpoint für Kategorien definieren
So können Sie mit WordPress eigene URL-Endpunkte (wie feed oder comments) und entsprechende Templates erstellen.
Was sind überhaupt Custom Endpoints/ Eigene Endpunkte?
Grundsätzlich sind das zusätzliche Anhänge an vorhandene URL-Strukturen. So haben beispielsweise Kategorien üblicherweise noch den Endpunkt /feed/. Dort können Sie dann alle Artikel der entsprechenden Kategorien als News-Feed finden.
Wozu braucht man eigene Endpunkte?
Es gibt verschiedene Einsatzmöglichkeiten für Custom Endpoints. Im konkreten Fall habe ich eine Archiv-Seite für ALLE Artikel einer bestimmten Kategorie umgesetzt. Das war nötig, weil die Seite sonst auf eine Pagination verzichtet hat. Damit nun für Google trotzdem eine Seite mit Links zu allen Artikeln sind, sollte es quasi eine Übersicht aller Artikel pro Kategorien geben.
Der entsprechende Endpunkt sollte an die Kategorie angehängt werden und archiv heissen. Nehmen wir mal eine Kategorie mit dem Namen WordPress an, dann sollte die Archiv-URL folgendermaßen aussehen: /wordpress/archiv/.
Endpunkt in der functions.php definieren
Der Endpoint kann recht einfach per add_rewrite_endpoint
definiert werden – bestenfalls immer per init:
function archiv_endpoint_categories() { add_rewrite_endpoint( 'archiv', EP_CATEGORIES ); } add_action( 'init', 'archiv_endpoint_categories' );
Der erste Parameter bestimmt dabei den Namen des Endpunktes, der zweite für welche Art von URLs es gültig ist. Hier nehmen wir die Kategorien, aber man kann auch Endpunkte für Seiten und Artikel definieren. Mehr dazu findet man in den Docs zu add_rewrite_endpoint.
Template-Redirect erstellen
Nachdem nun grundsätzlich der Endpunkt vorhanden ist, muss nur noch dafür gesorgt werden, dass die Seite aus dargestellt wird. In unserem Fall soll ein eigenes Template her. Die einfachste Möglichkeit ist dabei einfach in den template_redirect zu hooken.
function archiv_endpoint_redirect() { global $wp_query; if ( !isset( $wp_query->query_vars['archiv'] ) || ! is_category() ) return; include dirname( __FILE__ ) . '/archiv-template.php'; exit; } add_action( 'template_redirect', 'archiv_endpoint_redirect' );
In der Funktion archive_endpoint_redirect
wird dann einfach überprüft ob archiv im Query vorkommt und ob es sich um eine Kategorie handelt. Trifft beides zu, wird ein bestimmtes Template geladen.
Mitdiskutieren