Nur eine Kategorie auf Startseite (pre_get_posts)

  • Hallo,

    ich nutze eine angepasstes twentythirteen Theme. Ich würde gerne auf der Startseite nur die Kategorie mit der Nummer 1 anzeigen lassen, dazu habe ich in die functions.php folgenden Code eingefügt:

    PHP
    function textdomain_exclude_category( $query ) {
        if ( is_admin() || ! $query->is_main_query() ) {
            return;
        }
        if ($query->is_home() ) {
            $query->set( 'cat', '1' );
        }
    }
    add_action( 'pre_get_posts', 'textdomain_exclude_category' );

    Das funktioniert auch sehr gut, wenn ich im Adminbereich eingeloggt bin, sobald ich mich aber abmelde, zeigt die pre_get_posts Funktion keine Wirkung mehr.

    Jemand eine Idee, was ich falsch mache?

    Danke!

    Grüße
    Christian

    • 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

  • Ich glaube, da fehlt nur ein klein wenig - versuche mal Deinen code wie folgt zu ergänzen:

    PHP
    function textdomain_exclude_category( $query ) {
        if ( is_admin() || ! $query->is_main_query() ) {
            return;
        }
        if ($query->is_home() && $query->is_main_query() ) {
            $query->set( 'cat', '1' );
        }
    }
    add_action( 'pre_get_posts', 'textdomain_exclude_category' );
  • Ist er eben nicht! Du hast eine Bedingung weggelassen, welche in allen Anleitungen (bspw. im wordpress Codex) angegeben wird.

    PHP
    && $query -> is_main_query()


    Hast Du den Schnippsel spaßhalber mal ergänzt? Hat sich dadurch etwas geändert? Das würde mich doch jetzt mal interessieren.

    MEGAWORK EDV & Medien Service :: http://megawork.de

    Einmal editiert, zuletzt von MegaWork (5. Februar 2014 um 23:20)

  • Diese Abfrage wird bei mir schon in meiner ersten If-Anweisung abgearbeitet:

    PHP
    .....
        if ( is_admin() || ! $query->is_main_query() ) {
            return;
        }
        .....

    Die beiden Abfragen laufen unabhängig voneinander:

    Die erste fragt ab, ob der Seitenbesucher ein Administrator ist oder ob die Datenbankabfrage die Hauptabfrage ist, wenn ja erfolgt ein Rücksprung und die nächste Abfrage wird abgearbeitet. Eigentlich bewirkt diese Abfrage gar nichts, denn auch wenn die Bedingung erfüllt ist geht es einfach zur nächsten Abfrage.

    Die zweite fragt ab, ob die aktuelle Seite die Startseite ist und wenn ja, soll die Kategorie 1 angezeigt werden.

    Möglicherweise wolltest Du ja eine alternative Abfrage erstellen, in der Art:

    PHP
    if ( $a < $b )
    {
        echo "a ist kleiner als b";
    }
    elseif ($a == $b)
    {
        echo "a ist gleich b";
    }


    Dann fehlt aber das else und diese Abfrage würde bedeuten, das ein angemeldeter admin nicht nur die Kategorie 1 angezeigt bekommt.

  • kann ja auch garn nicht funktionieren denn weist du wo die return Anweisung hinspringt? siehe php Grundfunktionen!

    nur eine Code zu kopieren und wenn man Funktionen und Befehle nicht kennt, zu glauben das wird schon irgenwie funktionieren hat mit Programmierung leider nichts zu tun.

    Wordpress weil es spass macht, besonders beim WordPress Meetup in Linz

Jetzt mitmachen!

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