1. Herzlich willkommen bei WPDE.org, dem grössten und ältesten deutschsprachigen Community-Forum rund um das Thema WordPress. Du musst angemeldet oder registriert sein, um Beiträge verfassen zu können.
    Information ausblenden

Verschachtelte Kategorien

Dieses Thema im Forum "Allgemeines" wurde erstellt von heinetz, 19. März 2017.

  1. heinetz

    heinetz Well-Known Member

    Registriert seit:
    8. Oktober 2007
    Beiträge:
    82
    Zustimmungen:
    0
    Hallo Forum,

    ich kämpfe hier mit verschachtelten Kategorien. Ich kann leider keine wirkliche Regelmässigkeit herausfinden, WP schient es nicht so genau zu nehmen oder ich bin zu blöd ;(

    Ich habe Kategorien nach folgendem Muster angelegt:

    Kunden
    - Agentur_A
    -- Endkunde 1
    -- Endkunde 2

    Nun möchte ich meinen Beitrag der Kategorie "Endkunde 2" zuordnen und erwarte, dass er damit automatisch auch den Eltern der Kategorie zugeordnet ist, mir das verschachtelt im Widget des Backends angezeigt wird und der Permalink entsprechend aussieht. Allerdings verhält sich das anders. Wenn ich nur "Endkunde 2" als Kategorie festlege, sieht zwar der Permalink aus, wie erwartet, aber es werden weder alle 3 Kategorien im Widget, noch im Frostend angezeigt. Wähle ich für meinen Beitrag nicht nur "Endkunde 2", sondern auch deren Eltern aus, ist die Anzeige im Backend-Widget wie erwartet, allerdings stehen erstens die Eltern nicht mehr im Permalink, zweitens werden zwar alle 3 Kategorien im Frontend angezeigt, allerdings ist die Reihenfolge Wildwuchs. In dem konkreten Fall werden die Kategorien in der Reihenfolge: Endkunde 2, Kunden, Agentur_A aufgelistet, d.h aus der Reihenfolge lässt sich weder die Hierarchie ableiten, noch ist alphabetisch.

    Kann mir das jemand erklären?


    gruss,
    heinetz

    --
     
  2. helix

    helix Well-Known Member

    Registriert seit:
    28. Juli 2011
    Beiträge:
    1.808
    Zustimmungen:
    27
    Sorry, das scheitert bei mir schonmal daran, dass ich überhaupt nicht verstehe, was du jetzt eigentlich gemacht hast, welches Ergebnis du erwartet hättest und welches du erhalten hast.

    Verschachtelte Kategorien – soweit, sogut. Ich hoffe, du hast das darüber gemacht, dass du in der Verwaltung der Kategorien jeweils die Elternkategorie ausgewählt hast.

    Was ist ein „Widget des Backends“? Und wenn ja, welches Widget meinst du?
    Und welche Kategorien sollen wie im Widget oder im Frostend angezeigt werden? Irgendwie ist es etwas schwierig, dir zu folgen …

    Gruß
    helix
     
  3. heinetz

    heinetz Well-Known Member

    Registriert seit:
    8. Oktober 2007
    Beiträge:
    82
    Zustimmungen:
    0
    Sorry, ich hatte den Beitrag geschrieben, nachdem ich lange versucht hatte, das hinzubekommen. Nun versuche ich nochmal, es anders zu erklären.


    Ich habe zuerst 30 Beiträge angelegt.

    Ein Auszug:

    a) Beitrag A
    b) Beitrag B
    c) Beitrag C
    ...


    Danach habe ich in der Verwaltung 27 Kategorien zusätzlich zu der Kategorie 'Allgemein' angelegt und sie nach folgenden Muster verschachtelt.

    Ein Auszug:

    1) Kunden
    2) - Agentur_2
    3) -- Endkunde 3
    4) -- Endkunde 4
    ...
    (2 ist also Kind von 1, 3 und 4 sind Kinder von 2 und 1 hat keine Eltern. Die Bezeichnungen spielen im Moment noch keine Rolle)
    Bis zu diesem Zeitpunkt sind sämtliche Beiträge (automatisch) nur der Kategorie "Allgemein" zugeordnet. Um diese Zuordnung zu ändern, rufe ich bspw. Beitrag A über "Betrag bearbeiten" im Editor auf. Dort in der Sitebar (rechte Spalte) gibt es eine 'Box' mit dem Label Kategorien (die habe ich in meinem ersten Beitrag „Widget des Backends“ genannt). In dieser Box werden mir sämtliche Kategorien als verschachtelte Liste von Checkboxen angezeigt und nur die Checkbox für die Kategorie "Allgemein" ist gecheckt. Wenn ich nun über "Betrag ansehen" in's Frontend (keine Ahnung, ob die Bezeichnung 'Frontend' stimmt. Korrigiert mich bitte im Zweifel) wechsle (der Beitrag also mit single.php dargestellt wird), sehe ich auch dort eine Liste von Kategorien. Diese Liste besteht erwartungsgemäss aus nur einem Eintag "Allgemein". Die URL lautet http://example.dev/allgemein/betrag_a/.



    Jetzt versuche ich, meinen Beitrag A einer anderen Kategorie zuzuordnen...

    erster Versuch
    Ich wechsle also wieder in den Editor, wähle in der Box Kategorien als erstes die Checkbox "Allgemein" ab und die Checkbox "
    Endkunde 3" aus und speichere meine Änderungen.

    Drei Dinge fallen mir auf:



    1. [*=1](Editor) Die Darstellung der Liste in der Box 'Kategorien' hat sich geändert. Der Listenpunkt "Endkunde 3" ist gecheckt aber er wird nicht mehr als Unterpunkt von "Agentur_2" sondern auf oberster Ebene dargestellt.


      [*=1](Fontend) Die Liste Kategorien besteht nun (nur) aus dem einen Eintrag "Endkunde 3".


      [*=1](Fontend) Die Url lautet nun http://example.dev/kunden/agentur_2/endkunde_3/beitrag_a/


    In Bezug auf mein gewünschtes Ergebnis:




    1. [*=1](Editor) Das finde ich inkonsistent aber es ist mir letztlich egal.


      [*=1](Fontend) Ich hätte gerne gesehen, dass neben der Kategorie "Endkunde 3" auch deren Eltern angezeigt werden.


      [*=1](Fontend) Die Url entspricht genau dem, was ich benötige.


    zweiter Versuch
    Ich wechsle also wieder in den Editor, wähle in der Box Kategorien ausser der Checkbox "
    Endkunde 3" auch deren Eltern "Agentur_2" und Grosseltern "Kunden" aus. Nun speichere meine Änderungen.

    Drei Dinge fallen mir auf:



    1. [*=1](Editor) In der Box 'Kategorien' werden die drei ausgewählten Kategorien nun wieder hierarchisch dargestellt.


      [*=1](Fontend) Die Liste Kategorien besteht nun aus allen drei gewählten Kategorien.


      [*=1](Fontend) Die Url lautet nun http://example.dev/kunden/beitrag_a/


    In Bezug auf mein gewünschtes Ergebnis:




    1. [*=1](Editor) Das entspricht meinen Erwartungen aber es ist mir letztlich egal.


      [*=1](Fontend) Nun werden zwar ausser der Kategorie auch deren Eltern und Grosseltern angezeigt aber aus der Sortierung (1. Eltern, 2. Grosseltern, 3. Kategorie) lässt sich die Hierarchie nicht ableiten.


      [*=1](Fontend) In der Url fehlen nun die Eltern. Dass die Grosseltern angezeigt werden, hängt sicher mit meiner Einstellung unter Permalink zusammen.


      [x] Benutzerdefiniert
      http://example.dev/%category%/%postname%/

      Im Platzhalter %categorie% steht in dem Moment allerdings der Wert für die Grosseltern.


    Fazit
    Entweder ich mache einen Fehler oder ich krieg's mit Bordmitteln nicht hin ;( Ich habe mich im Moment darauf beschränkt, alles wie im ersten Versuch zu lösen und damit auf die Darstellung der Eltern und Grosseltern im Frontend erstmal zu verzichten, weil ich die Darstellung eh programmatisch anpassen muss. Aber dazu möchte ich erstmal Klarheit haben, ob ich bis hierher irgendwas falsch mache.


    Danke und
    gruss,
    heinetz
     
  4. helix

    helix Well-Known Member

    Registriert seit:
    28. Juli 2011
    Beiträge:
    1.808
    Zustimmungen:
    27
    Danke, so wird die Sache klarer.

    Erster Versuch -> das sind verschachtelte Kategorien. Dein Beitrag ist in der Kategorie der untersten Ebene einsortiert und damit mittelbar auch in den Elternkategorien.

    Zweiter Versuch -> das ist Mehrfachzuweisung zu mehreren Kategorien. Dass die Kategorien gleichzeitig (zufällig) auch hierarchisch verschachtelt sind, tut nichts zur Sache. WordPress weist immer eine Kategorie als „erste Kategorie des Beitrags“ zu, das ist (wenn ich mich nicht täusche), die Kategorie mit der niedrigsten ID.
    Das heißt: bei Mehrfachzuweisung bekommst du deinen Beitrag auch in den Archiven der weiteren Kategorien gelistet, aber ansonsten lässt sich nicht so wirklich damit arbeiten.

    Wenn du also wirklich verschachtelte Kategorien (und dazu die stimmigen URLs) willst, arbeite wie in Versuch eins.

    Die Darstellung im Editor, dass es da so aussieht, als wäre die Kategorie der untersten Ebene eine Kategorie der ersten Ebene – empfinde ich auch als inkonsistent (habe mir das gerade nochmal in meinem Spielblog angesehen). Kann ich mir eigentlich nur damit erklären, dass da jemand sich was sehr schlaues dabei gedacht hat (dem aber leider fast niemand mehr folgen kann). Du hast recht: nicht so wichtig.

    Darstellung der Kategorieliste im Frontend: ich vermute, dass das Standard-Kategorie-Widget von WordPress im Einsatz ist. Schau mal unter Design -> Widgets und klappe das Widget „Kategorien“ auf. Dann siehst du, dass du weitere Optionen hast, unter anderem, die Hierarchie deiner Kategorien abzubilden.

    Eine Sache fällt mir noch auf: Du schreibst, du hast im Frontend beim ersten Versuch nur die eine Kategorie (unterster Ebene) gelistet, in der der Beitrag einsortiert ist. Das könnte mit der Vorschau-Funktion zusammenhängen. Geh mal tatsächlich auf die Seite (waagrechte Admin-Bar, Link ganz links mit dem „Home“-Symbol), da müssten dir eigentlich alle existierenden Kategorien, zumindest alle, die Beiträge enthalten, gelistet sein, also zumindest die Standard-Kategorie „Allgemein“ müsste dort auch erscheinen.

    Gruß
    helix
     
  5. heinetz

    heinetz Well-Known Member

    Registriert seit:
    8. Oktober 2007
    Beiträge:
    82
    Zustimmungen:
    0
    Verstehe. Dann macht es Sinn so weiterzuarbeiten.

    genau ;)
    Gefunden. Allerdings benutze ich nicht das Standard-Widget, sondern meine Kategorie wird in bspw. single.php mit folgendem Code eingefügt:
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Darüber hinaus wird die Kategorie im Code eines Plugins angegeben mit:
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    An wieder einer anderen Stelle habe ich ein jQuery-Skript geschrieben, dass sämtliche Posts per Ajax als JSON nachlädt. Für den JSON-Request verwende ich das Plugin REST API. Den Request beeinflusse ich in der functions.php

    Ich hatte gedacht, die Elternkategorie müsse für gewöhnlich in allen drei Fällen in dem zurückgegebenen Array stehen. Nach Deiner grundsätzlichen Klärung, dass die Elternkategorie einem Beitrag nicht zugeordnet werden soll, ist klar dass ich alle drei Stellen einzeln anfassen muss aber das dürfte ja kein Problem sein ;)

    Das verstehe ich nun wieder nicht ;) Macht aber nichts, denn nachdem mir das Prinzip klar ist, dass Elternkategorien nicht explizit zugeordnet werden sollen, verhält sich jetzt alles wie erwartet und wir würden vermutlich aneinander vorbeireden, wenn wir versuchen, das zu klären.

    1000 Dank für Deine sehr gute Erklärung!

    schönen Abend und bis zum nächsten Mal,
    gruss,
    heinetz
     
  6. heinetz

    heinetz Well-Known Member

    Registriert seit:
    8. Oktober 2007
    Beiträge:
    82
    Zustimmungen:
    0
    Hallo Forum,

    jetzt möchte ich doch noch auf dem Thema rumreiten um vielleicht etwas dazuzulernen ;)

    An welchen einzelnen Stellen in den Template die Elternkategorie benötige, hatte ich ja geschrieben. Das an den betroffenen Stellen mit PHP zu machen, ist kein Problem. Allerdings geht das sicher "sauberer". Dazu nochmal von vorn:

    In meinem template single.php habe ich folgende Codeblock gefunden, der die Kategorie ausgibt:

    HTML:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Diesen Block habe ich kopiert und will meine Kopie sinnvoll anpassen:

    HTML:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Da habe ich mir also erstmal Funktionen ausgedacht, die es noch garnicht gibt. Die Logik, die in den Funktionen steht, ist im Grunde klar. Die Frage, die sich mir stellt, ist eher wie und wo könnte ich jetzt die Funktionen vernünftig definieren und macht das überhaupt Sinn oder erzeuge ich so vielmehr Code?


    gruss,
    heinetz
     
  7. SirEctor

    SirEctor Well-Known Member
    Ehrenmitglied

    Registriert seit:
    28. Oktober 2008
    Beiträge:
    12.361
    Zustimmungen:
    427
  8. heinetz

    heinetz Well-Known Member

    Registriert seit:
    8. Oktober 2007
    Beiträge:
    82
    Zustimmungen:
    0
    hello,
    erstmal danke für Deinen Tipp. Allerdings hätte ich mir schon zugetraut, im Code irgendwie an die Parent-Kategorie zu kommen. Meine Frage ist eher, ob ich die Logik in eine Funktion packen kann und natürlich kann ich auch grundsätzlich Funktionen mit PHP schreiben aber auf welche Weise und an welcher Stelle im Code so eine Funktion - im Sinne von Wordpress - sinnvollerweise definiert wird, damit ich den Code flexibel bleibt, würde ich gerne wissen.

    gruss,
    heinetz
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden