Problem mit is_page

  • Hallo,

    ich habe in einem bisher nur lokal erstellten WP-Theme (mehr CMS mit diversen 'statischen' Seiten) eine Abfrage in der Navigationsleiste, ob die jeweilige Seite Home, Impressum, Kontakt etc. ist. Je nach dem, ob diese Seite gerade aufgerufen wird, erhält der Listeneintrag eine andere Klasse, damit der Besucher sieht, daß er z.B. gerade das Impressum aufgerufen hat. Das klappt auch soweit für alle Menüpunkte außer für den Punkt Blog. Da klappt die Abfrage

    PHP
    <li <?php if (is_page('blog')){echo 'class="navi aktiv"';} else {
              echo 'class="navi"';} ?>><a class="text" href="<?php bloginfo('url'); ?>/blog/">Blog</a></li>

    leider nicht. Es wird nur die else-class (hier navi genannt) zugewiesen. Für das Blog habe ich einfach eine leere Seite namens Blog mit dem Standard-Template erstellt. Die Anzeige der Blogeinträge erfolgt auch wie sie sollte.

    Hat jemand eine Idee, wie ich der Blogseite beim Aufruf die korrekte Klassen (navi und aktiv) zuweise?

    • 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

  • Falls 'blog' einfach nur die Startseite mit den Blogeinträgen sein soll, dann kannst du nach is_home abfragen.

    "Eine gut gestellte Frage ist schon halb beantwortet."

  • Die Startseite ist leider eine andere, was ich auch nicht ändern kann, da ich für dieses Theme - wie erwähnt - WP primär als Mini-CMS nutzen möchte.

  • Sonst vielleicht jemand eine Idee, wie man die is_page('blog')-Abfrage so umsetzt, daß es funktioniert?

  • Sonst vielleicht jemand eine Idee, wie man die is_page('blog')-Abfrage so umsetzt, daß es funktioniert?

    Das muss eigentlich klappen. Stimmt der eingegebene Name wirklich mit dem Seitentitel unter "Titelform" überein?
    Ansonsten vielleicht lieber über die Seiten-ID gehen, die du auch benutzen kannst.

    "Eine gut gestellte Frage ist schon halb beantwortet."

  • Auszug aus meiner Theme, eigentlich genau das was du brauchst denk ich mal :)

    PHP
    <ul>
            <li id="home"><p><a href="<?php bloginfo('url'); ?>" <?php if (is_home() || is_single() || is_search() || is_page('archives')) {?>class="onpage"<?php } ?>>home</a></p></li>
            <li id="about"><p><a href="<?php bloginfo('url'); ?>/about/" <?php if (is_page('about')) {?>class="onpage"<?php } ?>>about</a></p></li>
            <li id="portfolio"><p><a href="<?php bloginfo('url'); ?>/portfolio/"<?php if (is_page('portfolio')) {?>class="onpage"<?php } ?>>portfolio</a></p></li>
            <li id="downloads"><p><a href="<?php bloginfo('url'); ?>/downloads/"<?php if (is_page('downloads')) {?>class="onpage"<?php } ?>>downloads</a></p></li>
            <li id="contact"><p><a href="<?php bloginfo('url'); ?>/contact/"<?php if (is_page('contact')) {?>class="onpage"<?php } ?>>contact</a></p></li>
        </ul>
  • Zitat

    Das muss eigentlich klappen.

    Das dachte ich eigentlich auch, bei den anderen Menüpunkten klappt's ja. Es klappt bei domain.tld/blog/ aber weder mit Blog (der Überschrift), noch mit blog (der Titelform) noch mit der ID.
    Was klappt, ist is_single(). Dann habe ich zumindest beim Aufruf der Einzelbeiträge die Kennzeichung fürs aktive Menü.

  • Danke Manuel, jetzt habe ich aber durch Lesen dieses Artikels und Rumprobieren selbst was gefunden, was funktioniert und auch für jede Single-Seite "Blog" im Menü markiert:

    PHP
    <li <?php if (is_home()){
    			echo 'class="navi aktiv"';
    			} elseif (is_single()){
    			echo 'class="navi aktiv"';
    			} else {
                            echo 'class="navi"';
    		        }
    		        ?>><a class="text" href="<?php bloginfo('url'); ?>/blog/">Blog</a></li>

    Deine Version sieht aber übersichtlicher aus...mal schauen, ob ich die auch umsetzen kann.

  • Ja, klappt auch...ich habe es noch mal etwas erweitert:

    PHP
    <li <?php if (is_home() || is_single() || is_search() || is_page('archiv') || is_category() || is_date()){echo 'class="navi aktiv"';} else {
              echo 'class="navi"';} ?>><a class="text" href="<?php bloginfo('url'); ?>/blog/">Blog</a></li>

    Da hat man auch gleich sämtliche Archive nach Jahr, Monat, Tag und Kategorien mit einbegriffen und dem Blog-Menüpunkt zugeordnet.

  • Ja, klappt auch...ich habe es noch mal etwas erweitert:

    PHP
    <li <?php if (is_home() || is_single() || is_search() || is_page('archiv') || is_category() || is_date()){echo 'class="navi aktiv"';} else {
              echo 'class="navi"';} ?>><a class="text" href="<?php bloginfo('url'); ?>/blog/">Blog</a></li>

    Da hat man auch gleich sämtliche Archive nach Jahr, Monat, Tag und Kategorien mit einbegriffen und dem Blog-Menüpunkt zugeordnet.

    Supi, dank dir dafür :)

  • Nur für Suchende ;)
    Es ist sicherer da immer mit IDs zu arbeiten, also statt:
    if (is_page('blog'))
    if (is_page('PAGE_ID'))

    Statt PAGE_ID dann die Nummer, weil es könnte ja vorkommen, das man die Seite mal unbenennt, dann trifft es nicht mehr, mit ID trifft es immer. Ich könnt mir vorstellen da suchst du dich dämlich nach einem Jahr.

Jetzt mitmachen!

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