Support » Allgemeine Fragen » Beiträge einer Kategorie nicht in der Startseite, sondern andere Seite anzeigen

  • Gelöst znac

    (@znac)


    WordPress: 6.0.2
    Theme: Child-Theme von Twenty Twenty-Two

    Ist es mit WordPress-Boardmitteln möglich,
    Beiträge, die einer bestimmten Kategorie zugeordnet sind,
    nicht auf der Startseite
    sondern auf einer anderen WordPress-Seite von mir
    auszugeben?

Ansicht von 13 Antworten - 1 bis 13 (von insgesamt 13)
  • Ja, das geht.

    Achso, falls du wissen möchtest, wie das geht:

    Child-Theme anlegen und in der functions.php folgenden Code verwenden:

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

    wobei 42 die ID der Kategorie ist, die hier ausgeschlossen wird.

    Solltest du mit „Bordmitteln“ nur Einstellungen im Customizer gemeint haben (kein eigener Code in einem Child-Theme oder [eigenem] Plugin), geht es nicht.

    Thread-Starter znac

    (@znac)

    @pixolin, entschuldige die unklare Frage, ich hätte mit „wie“ fragen sollen. Ich wußte jedoch nicht, ob es möglich ist oder nicht. Mit diesem Aktion-Hook schalte ich eine bestimmte Kategorie aus, super, hierfür Danke ich Dir.

    Soll ich für folgende Frage einen neuen Thread eröffnen oder hier bleiben?

    Frage:
    Wie kann ich über den Beta-Template-Editor mir eine Seite erstellen, in der nur Beiträge einer bestimmten Kategorie angezeigt werden?

    Das ist bisher nicht vorgesehen.

    Du kannst … 

    1. in Design > Editor das Template für die Startseite auswählen
    2. Über das Listenansicht-Ikon (1) den Abfrage-Loop-Block auswählen (2) und dort die Übernahme der Abfrage aus dem Template deaktivieren (3).

      Screenshot Einstellungen
      (zum Vergrößern anklicken)

      Etwas weiter unten in der Sidebar kannst du dann einen Filter einstellen, indem du nur bestimmte Kategorien (oder Schlagwörter, Autoren) auswählst (4), aber du kannst hier keine Kategorien ausschließen.

      Screenshot Einstellungen
      (zum Vergrößern anklicken)

    Wenn du nur mit Beiträge in drei Kategorien arbeitest, kannst du hier zwei Katagorien eintragen und hast damit die dritte Kategorie ausgeschlossen. Sobald du aber weitere Kategorien erstellst, musst du jeweils nachbessern, was eine unbefriedigende und fehleranfällige Lösung ist.

    Ich würde für den o.g. Code einfach ein Plugin erstellen:

    <?php
    /*
     * Plugin Name: ohne42
     * Description: Kategorie 42 von der Startseite ausschließen
     */
    
    function exclude_category( $query ) {
        if ( $query->is_home() && $query->is_main_query() ) {
            $query->set( 'cat', '-42' );
        }
    }
    add_action( 'pre_get_posts', 'exclude_category' );

    Auf deinem Computer in einem Verzeichnis ohne42 speichern als ohne42.php, Verzeichnis als ohne42.zip komprimieren, anschließend in WordPress Plugins > Installieren > Plugins hochladen > ohne42.zip hochladen und aktivieren.

    Thread-Starter znac

    (@znac)

    Danke Dir @pixolin,
    ein Plugin zu erstellen, sehe ich mich von meinem Wissenstand her derzeit außerstande. Aber vielleicht gibt es ja ein Plugin, das dass bereitstellt?

    Derzeit versuche ich Dein Code-Snippet

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

    zu verstehen und umzusetzen. Es klappt irgendwie nicht. Die ID habe ich aus der Tabelle terms.term_id ermittelt. Ist das korrekt?

    Du kannst …
    in Design > Editor das Template für die Startseite auswählen
    Über das Listenansicht-Ikon (1) den Abfrage-Loop-Block auswählen (2) und dort die Übernahme der Abfrage aus dem Template deaktivieren (3)…

    Das werde ich versuchen nachzuvollziehen, Danke.

    ein Plugin zu erstellen, sehe ich mich von meinem Wissenstand her derzeit außerstande.

    Echt jetzt? Du weißt doch, wie man auf einem Computer ein Verzeichnis erstellt und Text mit Copy/Paste in eine Datei zu kopieren ist auch Computer-Wissen für Einsteigerkurse bei der VHS.

    Einfacher konnte ich es nicht erklären.

    Hier das Plugin komplett: https://github.com/pixolin/withoutcat42

    Aber vielleicht gibt es ja ein Plugin, das dass bereitstellt?

    Ganz bestimmt.

    https://de.wordpress.org/plugins/search/exclude+category/

    Die ID habe ich aus der Tabelle terms.term_id ermittelt. Ist das korrekt?

    Viel zu kompliziert. Du brauchst nur mit der Maus über die Kategorie fahren und kannst die ID in der Statusleiste auslesen. In diesem Fall hat die Kategorie dontshow eine ID 21:

    Screenshot Einstellungen
    (zum Vergrößern anklicken)

    Thread-Starter znac

    (@znac)

    @pixolin

    `ein Plugin zu erstellen, sehe ich mich von meinem Wissenstand her derzeit außerstande.
    Echt jetzt? Du weißt doch, wie man auf einem Computer ein Verzeichnis erstellt und Text mit Copy/Paste in eine Datei zu kopieren ist auch Computer-Wissen für Einsteigerkurse bei der VHS.
    Einfacher konnte ich es nicht erklären.

    Manchmal denke ich komplizierter als es ist und stehe mir selber im Wege, da hilft dann auch kein VHS-Kurs, aber pixolin hilft :-)) Danke! Werde ich umsetzen.

    Zum Punkt: Beiträge einer Kategorie auf einer anderen Seite anzeigen
    Dein Vorschlag

    Du kannst …
    in Design > Editor das Template für die Startseite auswählen
    Über das Listenansicht-Ikon (1) den Abfrage-Loop-Block auswählen (2) und dort die Übernahme der Abfrage aus dem Template deaktivieren (3).

    war Ideengeber für folgende Lösungsmöglichgkeit:
    1. Neue Seite erstellen.
    2. Dort einen Block „Abfrage-Loop“ zuordnen.
    3. Dann eine Vorlage zuordnen.
    3. Block-Einstellungen > Filter > die Kategorie auswählen, deren Beiträge man auf dieser Seite angezeigt haben will.

    Thread-Starter znac

    (@znac)

    Vielen Dank @pixolin, das klappt!!!

    Neue Seite erstellen. Dort einen Block „Abfrage-Loop“ zuordnen. …

    … geht, ist aber nicht ideal für die Performance, weil WordPress mit Aufruf der Webseite bereits eine Datenbankabfrage auslöst, um dann auf der Webseite eine neue Datenbankabfrage vorgesetzt zu bekommen. 🙂

    Die Funktion verwendet einen Hook (eine Schnittstelle) pre_get_posts, was umgangssprachlich als „bevor du überhaupt anfängst, eine Abfrage zu machen …“ übersetzen könnte. Mit der Funktion teilst du WordPress dann mit, dass du die Kategorie XY in dieser Abfrage nicht ausgeben möchtest. Erspart dir eine weitere Abfrage und ist deshalb performanter. 🤓

    Thread-Starter znac

    (@znac)

    @pixolin,

    um Beiträge einer bestimmten Kategorie in dem Abfrage-Loop meiner Startseite nicht mehr anzuzeigen, gehe ich wie von Dir mit pre_get_posts vorgeschlagen vor (mit Deinem Plugin).

    Wie kann ich über den Beta-Template-Editor mir eine Seite erstellen, in der nur Beiträge einer bestimmten Kategorie angezeigt werden?
    Das ist bisher nicht vorgesehen.

    Man kann zwar über den Design-Editor ein neues Templates > hinzufügen. Jedoch weder umbenennen noch einer Seite oder einem Beitrag zuordnen – warum auch immer.

    Aber wie könnte ich nun, auf einer separaten Seite (nicht Startseite) nur die Beiträge anzeigen, die zu einer bestimmten Kategorie gehören?

    Das Startseiten-Template filtern ginge ja nicht. Deshalb fiel mir nur dieser Lösungsweg ein, in dem zuerst der Seiteninhalt angezeigt wird und dann die Beiträge aus der Datenbank geholt werden, die einer bestimmten Kategorie zugehörig sind. Gäbe es vielleicht später mit neueren Versionen einen performanteren Weg?

    Das Startseiten-Template filtern ginge ja nicht.

    Warum? Das sollte einwandfrei funktionieren.
    (Startseite filtern mit pre_get_posts.)

    Aber wie könnte ich nun, auf einer separaten Seite (nicht Startseite) nur die Beiträge anzeigen, die zu einer bestimmten Kategorie gehören?

    Je nach Permalinkeinstellungen sollte https://example.com/category/starwars die Beiträge der Kategorie starwars anzeigen. („Kategorie-Archiv“)

    Deshalb fiel mir nur dieser Lösungsweg ein, in dem zuerst der Seiteninhalt angezeigt wird und dann die Beiträge aus der Datenbank geholt werden, die einer bestimmten Kategorie zugehörig sind.

    Dann hast du doch wieder die Beiträge einer bestimmten Kategorie auf der Startseite – nur in einer eigenen Loop? Das lässt sich tatsächlich nur mit einer zusätzlichen Datenbankabfrage lösen.

    Thread-Starter znac

    (@znac)

    Ich sehe glaube ich den Wald vor lauter Bäumen nicht. Vermute mal wieder, dass es einfacher ist als ich denke.

    Warum? Das sollte einwandfrei funktionieren.

    Das tut es ja. Mein Problem war, die Beiträge, die ich auf meiner Startseite ausspare, auf einer separaten Seite auszugeben.

    Wenn ich Dich richtig verstanden habe, ist Dein Lösungsvorschlag, ein Link auf das entsprechende Kategorie-Archiv. Puhh, noch ein Punkt zum Lernen, aber es macht Spaß.

    Danke für Deine Geduld @pixolin

    Hallo,
    vielleicht ist auch noch der folgende Beitrag hilfreich, den ich vor einiger Zeit zu diesem Thema geschrieben habe.
    Vermutlich hat aber Bego bereits alles das gesagt, was ich damals in dem Beitrag erwähnt habe.

    Viele Grüße
    Hans-Gerd

Ansicht von 13 Antworten - 1 bis 13 (von insgesamt 13)
  • Das Thema „Beiträge einer Kategorie nicht in der Startseite, sondern andere Seite anzeigen“ ist für neue Antworten geschlossen.