spezielle Klasse in wp_list_pages einfügen

  • 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:

    PHP
    get_header();
    $toppage = '123';  // ID der statischen Übersichtsseite


    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.

    PHP
    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');
    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Habe eine Lösung gefunden, die anscheinend auch funktioniert.

    Der Filter kommt in die functions.php und überprüft also in dem speziellen Fall die im Artikel-Template definierte Variable, die identisch ist mit der Page-ID, die von wp_list_page in der Liste als Klasse verwendet wird und fügt bei Übereinstimmung die Klasse "current_page_item" hinzu.

    Anmerkung: Sollte man nur ein Artikel-Template für alle Kategorien verwenden, also die normale single.php, dann könnte man die Verknüpfung zu den jeweiligen statische "Hauptseiten" ebenfalls herstellen. Gleiches geht dann auch bei der WP-eigenen Kategorienansicht (category.php)

    PHP
    get_header();
    if (is_category('1')) $toppage = '123';
    elseif  (is_category('2')) $toppage = '124';
    ...

    Wie gesagt, der ganze Aufwand dient nur dazu, die virtuell verknüpfte Seite beim Aufruf eines Artikels (bzw. einer Kategorieübersicht) im über wp_list_pages abgebildeten Menü (Seitenübersicht) via CSS hervorzuheben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!