Titellänge der Artikel im Widget begrenzen

  • Hallöchen zusammen,

    ich benötige mal eure Hilfe.

    Ich nutze zur Anzeige meiner letzten Beiträge und Kommentare die Widget-Funktion. Nun möchte ich, dass bei den Titeln der Beiträge nicht der komplette Titel angezeigt wird. Das heißt, ab einer bestimmten Anzahl von Wörtern soll nur noch ein ... folgen. Der Grund ist, dass gerade bei langen Titel das ganz über mehrere Zeilen gehen kann, was wiederum das Layout sprengt und nicht schön aussieht.

    Folgenden Code habe ich bereits getestet.

    PHP
    <?php if (strlen($post->post_title) > 20) {echo substr(the_title($before = '', $after = '', FALSE), 0, 20) . '...'; } else {the_title();} ?>

    Leider kürzt dieser nur den Titel im Artikel aber genau das bringt mir ja nix, zumal es auch keinerlei Auswirkung auf die Ausgabe im Widget hat.

    Wie aber kann ich dem Widget sagen, es soll genau das tun, was der Code im normalen Artikel bewirkt? Ich habe ja im Widget keine Möglichkeit irgendwas einzutragen.

    Wer kann da weiterhelfen?

    Freue mich auf eure Antworten.

    Dunkelziffer

    • 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

  • Schreibe folgenden Code in die functions.php Deines Childthemes:

    Code
    add_filter( 'widget_display_callback', 'mmx_shorten_widget_title', 15, 3 );
    function mmx_shorten_widget_title( $instance, $widget, $args ){
        $title = $instance['title'];
        $len = 20;
        if ( strlen( $title ) > $len ) {
            $title = substr( $title, 0, $len ) . '...';.
        }
        $instance['title'] = $title;
        return $instance;
    }

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Vielen Dank. Habe es mal gestest und bekam immer einen Error angezeigt. Habe daraufhin den Punkt hinter dem Semikolon (siehe Code)

    PHP
    $title = substr( $title, 0, $len ) . '...';.

    gelöscht. Danach war die Fehlermeldung weg aber die Titellänge blieibt bisher unberührt.

  • Der Punkt hat sich beim Nachbearbeiten hier im Forum eingeschlichen :-( Die Funktion habe ich bei mir getestet, allerdings mit $len = 10, weil meine Titel nicht so lang sind.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Ok das ist seltsam. Ich hatte sogar verschiedene Längen ausprobiert aber nix hat was gebracht.

    Ich hab den Code jetzt auch mit $len = 10 drin, aber es ändert sich nix.

    Ich frag mich grad was ich falsch mache. Inna functions.php ist es drin, es kommen keine Fehler aber die Titellänge weigert sich.

    Ne Idee worans liegen könnte?

  • Für die Länge der Post-Titel der einzelnen Posts innerhalb der Standard "Recent Posts" oder "Recent Comments" Widgets gibt es leider keinen Filter.

    Würde für den genannten Fall ein eigenes Widget empfehlen, den entspr. Code kann man weitestgehend aus [FONT=courier new]wp-includes/default-widgets.php[/FONT] entnehmen.

    Mehr zur Programmierung eigener Widgets z.B. hier.

    Der o.g. Code kürzt meines Erachtens die Länge des Widget-Titels, also den Text "Letzte Beiträge"

    Einmal editiert, zuletzt von b3317133 (9. Januar 2015 um 12:31)

  • Oh Gott, so weit das ich eigene Widgets erstellen kann bin ich definitiv noch nicht. Aber trotzdem danke :)

    Wenn du den Code von mensmaximus meinst, der ändert auch nicht die Länge des Textes "Letzte Beiträge", so wie du vermutest. Habs grad probiert. Zumindest nicht bei mir. Aber das wäre dann ja auch nicht der Sinn und Zweck der Sache.

    Dann werde ich wohl mal schauen, ob es Plugins gibt, mit denen ich das erreichen kann, was ich gern möchte. Irgendwie muss das doch möglich sein. Hoffe ich...

  • Hab dir auf die PN geantwortet.

    Ich werde mir das mal anschauen und nebenbei nach weiteren Lösungen suchen.

    Falls also doch noch jemand eine hilfreiche Idee hat, immer her damit. :)

  • Ich dachte Du willst die Titel der Widgets kürzen.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Nee mensmaximus. Hab ich mich undeutlich ausgedrückt, dann entschuldige ich mich dafür.

    Ich möchte die Titel der Kommentare und Beiträge kürzen, nicht die Überschrift.
    Hier mal ein Bild

    Bei längeren Titeln der Beiträge verschiebt sich das ganze alles und wird auf mehrere Zeilen verfrachtet, da der volle Name angezeigt wird und das möchte ich verhindern. Es soll nur eine bestimmte Anzahl an Buchstaben oder Worten (wie auch immer) angezeigt werden und dann ...
    Damit sich halt nicht alles bei längeren Titeln verschiebt.

    Hoffe das war jetzt besser verständlich :)

    Danke für den Tipp mit dem overflow Ingo.
    Klappt fast perfekt. Das Problem ist, egal was ich probiere, es werden keine ... angezeigt, was ja, wenn ich das richtig verstehe, durch ellipsis gehandhabt werden soll. Stattdessen wird der Text nur abgeschnitten.
    Hab mein Widget entsprechend um folgende Werte ergänzt

    Code
    white-space: nowrap;
    overflow: hidden; 
    text-overflow: ellipsis;


    Siehe hier ein Bild

  • Nee mensmaximus. Hab ich mich undeutlich ausgedrückt, dann entschuldige ich mich dafür.

    Du hast nix falsch gemacht. Es war spät und ich habe nicht richtig gelesen. Mein Fehler.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Bei mir funktionierts (WP-Standardtheme Twenty Thirteen):

    Welchem Element oder welcher Klasse hast Du denn die CSS-Daten zugewiesen?
    Ich habe es direkt dem a-Element zugeordnet, damit das Datum nicht verschwindet:

    HTML
    .widget_recent_entries.widget li  a {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
        display: block !important;
    }

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Ok super Ingo, nun geht es bei mir auch. Hatte totteliger Weise vergessen die dazugehörige Klasse mit anzugeben.

    Durch das display: block hab ich allerdings wie du auch, nun das Datum und den Beitrag in zwei Zeilen. Allerdings würde ich das gern in einer behalten. Geht das überhaupt dann noch?

  • Klar geht das.

    Du mußt nur unten das display:block !important; und oben das a aus dem CSS rausnehmen. Damit bezieht sich das dann auf das ganze Listen-Element (li) und so wird das Datum dann ggf. auch hinter den Punkten verschwinden.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Ja hab die Variante grad probiert. Das Datum verschwindet dann tatsächlich. Ich vergaß das es ja Standard rechts neben dem Beitrag angezeigt wird. Besser fände ich es, wenn es links wäre, dann : und dann der Titel.

    Wahrscheinlich gibts dafür ne Möglichkeit das in der functions.php festzulegen oder?

    Falls nicht, werde ich halt die Übersicht auf 2 statt 3 Beiträge ändern müssen, damit das dann alles noch ins Layout passt.

    Tut mir leid das ich euch hier grad so ausquetsche :)

  • Hi,

    ist wohl ein paar Tage her aber für die jenige die gleiche Problem haben, hier eine Lösung:

    Öffne den Datei wp-includes/default-widgets.php und suche

    PHP
    <?php if ( get_the_title() ) the_title(); else the_ID(); ?>

    ersetze mit

    PHP
    <?php if (get_the_title()) echo kuerzeLinkText(esc_attr(get_the_title()), $wunschlaenge = 22, $wunschfarbe = "b7b7b7"); else the_ID(); ?>

    Füge in funktions.php folgende Code

    Speichern und hochladen

  • Das mag zwar funktionieren, aber Änderungen direkt in den WP-Dateien (wp-includes) vorzunehmen, ist eine ganz schlechte Idee. Nach dem nächtsen Wordpress-Update ist möglicherweise alles wieder weg und man muße es jedes mal wieder ändern.

    Zudem hat die CSS-Lösung den Vorteil, das keine Wörter "verstümmelt" werden und der komplette Titel weiterhin im HTML-Quelltext steht. Zudem weiß der Browser am Besten, wo etwas gekürzt werden muß. Das bekommt man mit festen Zeichenzahlen nicht hin, denn die tatsächlich dargestellte Breite ist von der Schriftart und vom Text selbst abhängig.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

Jetzt mitmachen!

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