Ich habe ein Projekt, bei dem die "kategorieübersicht" über ein statisches Seitentemplate läuft. Daher werden für die Navigation auch keine wp_list_categories sondern wp_list_pages verwendet. Alles funktioniert perfekt, lediglich das Highlighting beim Aufruf eines Artikels funktioniert bislang nicht. Beim Aufruf der Seite verwende ich die css-klasse "current_page_item", für die Artikel möchte ich diese nun noch über einen Filter einfügen.
Damit WP auch weiss, welche Seite zu welcher Kategorie gehört, gebe ich neben einigen anderen Variablen auch die der statischen Übersichtsseite im Template mit. Jede Übersichtsseite und jede Kategorie hat hierbei ihr eigenes Template.
Im Artikeltemplate steht also drin:
Die ID ist damit jeweils identisch mit der von Wordpress erstellten Klasse "page-item-123" in der wp_list_pages Liste. Über die Echo-Funktion wird die Variable auch angezeigt, ist also vorhanden.
Nun will ich praktisch bei der Erstellung der Liste die mitgegeben Variable mit der page-item-Nummer vergleichen und dann dort die zusätzliche Klasse einfügen. So dass also die Seitennavigation auch beim Aufruf eines Artikels entsprechend per CSS hervorgehoben werden kann.
Leider macht dies mein Code nicht, irgendwo habe ich einen Fehler drin. Vielleicht hat jemand eine Idee, ich denke es liegt am preg_match. Zudem stellt sich die Frage, ob ich dies über eine foreach-Schleife laufen lassen muss, um jeden Listenpunkt einzeln zu prüfen.
Nachfolgender Code ersetzt die Klasse in allen Listenpunkten.
function lp_show_current_page_on_single($output) {
if( is_single() ) {
$page->ID = $toppage;
if(preg_match('#page-item-' . $page->ID . '#', $output)) {
$output = str_replace('page_item', 'page_item current-page', $output);
}
}
return $output;
}
add_filter('wp_list_pages', 'lp_show_current_page_on_single');