Support » Allgemeine Fragen » Kategorie auf Startseite, aber nicht auf Beitragsseite

  • Gelöst FSt

    (@fst)


    Hallo

    Ich habe unter „Einstellungen > Lesen“ meine WordPress-Installation so eingestellt, dass die Startseite eine eigene Seite ist und die Seite „Aktuelles“ als Beitragsseite definiert.

    Auf der Startseite blende ich über ein Widget jeweils die letzten sechs Beiträge ein. (ich verwende das „Genesis Framework“ und dort die „Genesis – Featured Beiträge“ als Widgets). Dieser Teil funktioniert auch tadellos und sollte mit meiner Frage (evtl.) nicht zu tun haben.

    Auf der Beitragsseite soll nun eine bestimmte Kategorie (ID=28) nicht angezeigt werden. Auf der Startseite hingegen soll alles angezeigt werden.

    Sämtliche Suchen, führten mich immer nur zur Löschung einer Kategorie auf der Startseite (über die Manipulation der functions.php, oder über das Plugin
    Ultimate Category Excluder). Doch beide Lösungen blenden die Kategorie jeweils auf der Startseite aus.

    Nachdem ich mich nun dumm und dusselig gesucht habe, wende ich mich hier an dieses Forum. Ich kenne die Programmierung von WordPress nicht gut genug, aber ich vermute mittlerweile, dass mein Wunsch evtl. technisch gar nicht umsetzbar ist?

    Kann mir jemand einen Tipp geben, wie – oder ob – dieses Problem überhaupt gelöst werden kann?

    Schon mal herzlichen Dank
    Martin

    Die Seite, für die ich Hilfe brauche: [Anmelden, um den Link zu sehen]

Ansicht von 3 Antworten - 1 bis 3 (von insgesamt 3)
  • Moderator Bego Mario Garde

    (@pixolin)

    Das Zauberwort lautet hier „pre_get_posts“ und bezeichnet einen Hook (eine Programmierschnittstelle), mit der du vor Ausführung der Datenbankabfrage indivduelle Anpassungen wie „ich möchte auf meiner Beitragsübersichtsseite die Beiträge mit der Kategorie-ID 42 ausblenden“ vornehmen kannst. Der Code sieht dann z.B. so aus:

    
    add_action( 'pre_get_posts', 'exclude_category' );
    
    function exclude_category($query){
        if ( $query->is_home() && $query->is_main_query() && ! is_admin() ) {
          $query->set( 'cat', '-42' );
        }
    }
    

    Mit der Zeile
    if ( $query->is_home() && $query->is_main_query() && ! is_admin() ) {
    wird sichergestellt, dass diese Einschränkung nur gilt, wenn

    • die Beitragsübersichtsseite („Home“) angezeigt wird und
    • es sich um die Haupt-Abfrage handelt (und z.B. nicht eine Abfrage für ein Widget in der Sidebar) und
    • du dich nicht im Admin-Bereich befindest

    Den Code kannst du entweder am Ende der functions.php eines Child-Themes (!) einfügen oder (wenn es dir zu mühsam ist, dafür extra ein Child-Theme anzulegen) mit dem Plugin Code Snippets als neues Code-Snippet hinzufügen.

    Thread-Ersteller FSt

    (@fst)

    Hallo

    Herzlichen Dank für die superschnelle Hilfe. Funktioniert perfekt. Ich habs noch etwas abgeändert und erlaube mir für andere diese Version hir auch zu posten.

    Danke und Gruss
    Martin

    add_action( 'pre_get_posts', 'exclude_category' );
    
    function exclude_category($query){
        if ( $query->is_home() && $query->is_main_query() && ! is_admin() ) {
          $query->set( 'cat', '-28' );
        }
    }
    Moderator Bego Mario Garde

    (@pixolin)

    Richtig, für ID 28 nimmst du $query->set( 'cat', '-28' ); 🙂

Ansicht von 3 Antworten - 1 bis 3 (von insgesamt 3)