the_category vs. get_the_category

  • Hallo Forum,

    vorab: Ich habe nur wenig Erfahrung mit der Anpassung von WP-Template-Code und versuche gerade, ein Verständnis dafür zu entwickeln.

    jetzt stehe ich vor folgender Aufgabe:

    Um meine Beiträge als Timeline darzustellen, nutze ich das recht einfache Plugin Infinite Timeline. Beiträge werden wie im Archiv-Template chronologisch sortiert als Teaser dargestellt. Was mir in dem Teaser fehlt sind die Kategorien. Nun habe ich schon herausgefunden, dass ich mit get_the_category() da rankomme und weiss, wie ich aus dem zurückgegebenen Array den entsprechenden HTML-Code generieren kann, damit
    die Kategorien, wie im Archiv-Template dargestellt werden. Nun habe ich mich gefragt, ob das u.U. auch effizienter geht und bin auf die
    Funktion the_category gestossen, die mir genau den HTML-Code ausgeben würde, den ich brauche. Nur funktioniert the_category nicht an der Stelle, wo ich die Funktion einsetzen möchte. Nun bin ich auch schon so weit, dass ich begriffen habe, dass es hier offenbar einen grundsätzlichen Unterschied gibt und es sich genauso mit get_the_title() vs. the_title() verhält, denn im Originalcode wird Ersteres verwendet, während zweiteres auch nicht funktioniert.

    Nun meine Frage:

    Code
    $category = get_the_category();
    
    
        foreach ($category as &$cat) {
            if ($cat -> parent == 4) {
                $temp = '<a href="' .get_category_link( $cat -> term_id ). '">';
                $temp.= $cat -> name;
                $temp.= '</a>';
                ...
            }

    Komme ich irgendwie drum herum, den HTML-Code so zu erzeugen, wie ich das jetzt mache ? Kann ich u.U. die Funktion
    the_category() doch verwenden ?

    danke für Tipps und gruss,
    heinetz

    ps. Mir ist bewusst, dass hier niemand eine Glaskugel hat. Aber wenn ich den gesamten Plugin-Code hier poste, wird's unübersichtlich und ich hoffe, dass Ihr euch vorstellen könnt, an welcher Stelle the_title() nicht funktioniert, während get_the_title() funktioniert.

    Einmal editiert, zuletzt von heinetz (11. Februar 2017 um 11:37)

    • 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

  • Nur funktioniert the_category nicht an der Stelle, wo ich die Funktion einsetzen möchte.

    Wo genau hast Du sie denn eingesetzt?

    Möglicherweise rufst Du Funktionen die für "in der Loop" vorgesehen sind, "ausserhalb der Loop" auf. Für solche Fälle gibt es in WordPress [FONT=courier new]setup_postdata()[/FONT] i.v.m. [FONT=courier new]wp_reset_postdata()[/FONT], damit baut man sich sozusagen eine kleine extra Loop, mehr dazu hier.


  • Möglicherweise rufst Du Funktionen die für "in der Loop" vorgesehen sind, "ausserhalb der Loop" auf.

    so ähnlich hatte ich das versucht zu interpretieren.


    Für solche Fälle gibt es in WordPress [FONT=courier new]setup_postdata()[/FONT] i.v.m. [FONT=courier new]wp_reset_postdata()[/FONT], damit baut man sich sozusagen eine kleine extra Loop, mehr dazu hier.

    Danke für den Tipp. Darin bestand (indirekt) die Lösung. In dem Code habe ich sowohl [FONT=courier new]setup_postdata()[/FONT]als auch [FONT=courier new]wp_reset_postdata() gefunden ... [/FONT]aber es funktionierte dennoch nicht, obwohl es ja hätte funktionieren müssen ;)

    Dass:

    Code
    $output = '<p>'  .the_category() .'</p>';

    ... nicht funktionieren kann, ist mir auf den zweiten Blick klar geworden als ich meine Ausgabe statt im p-Tag ganz oben auf der Seite wiederfand ;)
    Das könnte ich nun mit Output buffering lösen, ist aber keine saubere Lösung ;)

    gruss,
    heinetz

Jetzt mitmachen!

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