More-Tag bzw. the_excerpt im Theme gefiltert?

  • Ich kann bei meinem aktuell verwendeten Theme entweder die excerpts unformatiert und ohne more-tag anzeigen lassen

    PHP
    <div class="entry">
            <a href="<?php the_permalink() ?>"><img class="postimg" src="<?php bloginfo('stylesheet_directory'); ?>/timthumb.php?src=<?php get_image_url(); ?>&amp;h=150&amp;w=250&amp;zc=1" alt=""/></a>
            <div class="clear"></div>
        </div>
    
    
    </div>

    oder, wenn ich diesen code einfüge:

    PHP
    <?php the_content( __(  'Weiterlesen')); ?>
    PHP
    <div class="entry">
            <a href="<?php the_permalink() ?>"><img class="postimg" src="<?php bloginfo('stylesheet_directory'); ?>/timthumb.php?src=<?php get_image_url(); ?>&amp;h=150&amp;w=250&amp;zc=1" alt=""/></a>
            <?php the_content( __( 'Weiterlesen')); ?>
            <div class="clear"></div>
        </div>
    
    
    </div>

    sehe ich die volle Formatierung im Excerpt - was mir nicht so passt weil dann alles strong ist und darunter dann merkwürdigerweise "Continue Reading 'NAME DES ARTIKELS'". Also halt nichts was so da steht, wie ich mir das wünsche.

    Das einzig verdächtige habe ich in der functions.php gefunden:

    aber ich sehe nicht, was ich da ändern müsste.

    Vielleicht kennt jemand das Problem oder kann es gleich herauslesen? Würde mich über Tipps sehr sehr freuen.

    Grüße,

    cored

    Einmal editiert, zuletzt von cored (26. Januar 2014 um 03:24)

    • 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

  • Weil ich nicht verstehe was Du meinst. get_the_excerpt() liefert den Auszug, den Du unterhalb der Wysiwyg/Textarea in das Input-Feld für die Description eingibst und selbstverständlich erfolgt diese Eingabe unformatiert. Oder was willst Du mit HTML-Elementen oder Styles innerhalb des Meta-Tags Description?

    Der More-Tag bezieht sich hingegen eigentlich auf den Content und der wird von der Funktion nicht gefiltert. Gefiltert wird aber, wenn kein Auszug für die Description erstellt wurde, ein aus dem Content mit dieser Funktion erstellter Auszug.

    PHP
    add_filter('excerpt_more', $more_callback);

    Doch diese Funktion wird ja nicht benötigt, wenn ein vernünftiger Auszug ins Formular eingegeben wurde, der ja ohnehin nicht länger als 160 bis 200 Zeichen sein sollte. Oder verstehe ich etwas nicht und bringe etwas durcheinander?

    In meiner function.php finde ich nichts mit excerpt_more. Den Text für eine Description gebe ich auch lieber selbst ein. Dabei fällt mir ein, für Feeds hatte ich mal eine ähnliche Funktion geschrieben. Du könntest diese zum Test mal vor der Zeile mit den p-Tags einfügen.

    PHP
    /* Lösche alle Script- und HTML-Tags aus dem Text */
        $output = preg_replace("/<.*?>/is" , "", $output);
        $output = preg_replace("/\s{2,}/is", "", $output);

    Auf dieser Seite ist the_excerpt recht gut erklärt:

    http://www.texto.de/die-vielen-moe…wordpress-1218/

    Einmal editiert, zuletzt von Melewo (27. Januar 2014 um 17:49)

  • Uh, ich glaube du verstehst mich falsch. So wie das Theme ist, kommen excerpts auf der Hauptseite. Ich kann dafür auch angeben wie lang sie sein sollen, also wo er abbricht. In diesem Fall 70 Zeichen.

    Ich möchte aber auch das more-tag haben, also im Endeffekt "Weiterlesen" am Ende des Auszuges. Wenn ich das jedoch wie oben zu sehen in den code schiebe mit "the_content" ("the_excerpt" funktioniert zum Aufrufen nicht) dann wirft er mir "Continue Reading" + Name es Artikels unter den excerpt. Und das muss ja irgendwo verankert sein in der functions.php, dass er automatisch so vorgeht.

    Eingeschrieben habe ich

    PHP
    <?php the_content( __(  'Weiterlesen')); ?>

    Dadurch erscheint dann der Auszug, jedoch strong und halt mit Continue Reading usw...

    Ich kann statt weiterlesen auch sonstwas eingeben, trotzdem im frontend halt wie beschrieben.

    Dafür muss der Grund ja irgendwo in der functions.php liegen, wenn ich nicht irre.

  • Woher jetzt das "Continue Reading" kommt, kann ich nicht genau sagen, doch bei WordPress läuft ja beinahe alles über po und mo Sprachdateien, die Du nur mit dem Editor Poedit oder mit dem Plugin Codestyling Localization bearbeiten kannst.

    http://wordpress.org/plugins/codestyling-localization/

    In der wp-content/languages/de-DE.po finde ich zum Beispiel 3 Einträge mit Weiterlesen, die sich aber auf den Editor TinyMCE beziehen.

    Code
    #: wp-includes/js/tinymce/langs/wp-langs.php:505
    msgid "More..."
    msgstr "Weiterlesen …"

    In dieser Datei eine Änderung vorzunehmen nutzt Dir aber nichts, weil auch die mo-Datei neu erstellt werden muss, was Dir mit dem Editor oder Plugin gelingen sollte.

    Was Dein anderes Problem betrifft, hier findest Du beide Beispiele, also mit the_content und mit get_the_excerpt.

    http://www.coder-welten.com/seitenvorlage-…tischen-seiten/

    Dort, wo ich in anderen Vorlagen the_content benutze, filtere ich HTML aus dem Content. Woher kommt oder woher soll <b> oder <strong> kommen, wenn Du es vor der Ausgabe mit

    PHP
    $output = preg_replace("/<.*?>/s" , "", $output);

    herausfilterst? Ein Filter lässt sich auch nur für einzelne Seiten oder einzelne Vorlagen verwenden, Beispiel:

    http://www.coder-welten.com/benutzereingab…nd-verarbeiten/

    Einmal editiert, zuletzt von Melewo (28. Januar 2014 um 10:47)

  • Habe noch einmal geschaut, befindet sich in wp-content/languages/themes/twentytwelve-de_DE.po, wobei dann für twentytwelve das jeweilige Theme enthalten sein sollte.

    Code
    msgid "Continue reading <span class=\"meta-nav\">&rarr;</span>"
    msgstr "Weiterlesen <span class=\"meta-nav\">&rarr;</span>"

    Und wie bereits geschrieben, ohne eines der beiden erwähnten Tools kannst Du da nichts ändern wollen, um eine bearbeitete Sprachdatei zu erstellen. Möglicherweise genügt es aber bereits, wenn Du den String nicht verstümmelt eingibst, sondern vollständig.

    Code
    the_content(__("Weiterlesen <span class=\"meta-nav\">&rarr;</span>"));

    Einmal editiert, zuletzt von Melewo (28. Januar 2014 um 11:43)

  • Ich weiß nicht wie ich mir oder dir das begreiflich machen soll.

    Lasse ich alles wie es ist bei index, sind keine Formatierungen zu sehen. Dann steht da statt dem neuen Befehl mit the_content

    PHP
    <?php wpe_excerpt('wpe_excerptlength_index', ''); ?>

    Ist das drin gibt es keine Formatierungen und auch kein Continue Reading.

    Dein Tool habe ich ausprobiert. Im Theme ist keine Sprachdatei hinterlegt und ich weiß auch nicht wo ich das mit dem angehängten Artikelding suchen soll.

    Der Fehler bzw. die Eigenheit muss in der functions.php sein. Irgendein Filter verhindert dass bei the_content ein "Continue Reading" steht. Was auch immer es ist.

    Zudem weiß ich nicht, wo ich den HTML-Filter überhaupt hätte einbauen sollen in der Functions, zumal da nichts mit the_content überhaupt steht, wo ich das mit assoziieren würde.

    Ich bin kein PHP-As. Nichtmal im Ansatz. Deshalb hilft es mir grad nicht irgendwas neu zu schreiben oder so. Ich will an sich nur wissen wie das verdrahtet ist, was jetzt da steht um es zu ändern. Bis jetzt hat alles geklappt, nur das nicht.

  • Ich bin kein PHP-As. Nichtmal im Ansatz. Deshalb hilft es mir grad nicht irgendwas neu zu schreiben oder so. Ich will an sich nur wissen wie das verdrahtet ist,


    Nun gut, ich kann dafür kein Englisch, wir hatten in der Schule Russisch als Pflichtfach bei Fremdsprachen, war im Osten halt so und davon blieb auch nichts hängen. Die Codex-Seiten von WordPress bereiten mir deshalb zuweilen einige Probleme, denn so richtig verständlich sind die Translator-Ergebnisse zuweilen nicht. Doch ohne PHP wirst Du wohl nicht weiterkommen, um einen Draht zu finden.

    Beschrieben werden die Funktionen the_content und get_the_content unter:

    http://codex.wordpress.org/Function_Reference/the_content
    http://codex.wordpress.org/Function_Reference/get_the_content

    Das allein nutzt noch nicht viel, ein Blick in wp-includes/post-template.php hilft dann weiter. Etwas PHP-Kenntnisse sind erforderlich und dass jede Funktion letztendlich, unabhängig davon wie viele Argumente übergeben wurden, nur einen Wert zurückgeben kann, sollte bekannt sein.

    https://core.trac.wordpress.org/browser/tags/3…st-template.php

    Wenn Du Dir nun die Funktionen in der post-template.php anschaust, wirst Du feststellen, dass die the_content keinen Rückgabewert liefert, da in der Funktion kein return enthalten ist, sondern das Ergebnis von der Funktion direkt mit echo ausgegeben wird, falls diese Funktion irgendwo im Template aufgerufen werden sollte.

    Innerhalb der Funktion the_content wird aber die Funktion get_the_content aufgerufen, somit kommt die the_content nicht ohne get_the_content aus und Du könntest gleich mit get_the_content arbeiten.

    Innerhalb von get_the_content wird der Content mit preg_match nach dem More-Tag durchsucht und der Content mit explode geteilt.
    Weiter unten in der Funktion findest Du dann die Zeilen, wo der Link zusammengesetzt wird, der den $more_link_text enthält. $more_link_text wiederum enthält das Ergebnis der Funktion wp_kses_no_null und die Funktion wp_kses_no_null wird in der wp-includes/kses.php definiert und filtert mit preg_replace die 0 aus?
    Was für eine 0? Wenn man hier angekommen sein sollte, darf man noch einmal von vorn beginnen und lernt es dann schneller. Gut, das behalte ich mir jetzt für später auf.

    get_the_content bringt aber den Vorteil mit, dass Du deinen eigenen Filter darüber stülpen kannst. Soll jetzt nur zum Experimentieren sein, mehr nicht.

    Außerhalb von The Loop eine Funktion definieren:


    Innerhalb von The Loop dann die Ausgabe:


    Nun könntest Du statt 'weiter' Deinen eigenen Linktext benutzen. Die Funktion filtere_inhalt habe ich beim Experiment gleich in die Datei außerhalb von The Loop geschrieben.

    Einmal editiert, zuletzt von Melewo (29. Januar 2014 um 09:14)

  • Zu Deiner Frage aus der Nachricht. Funktionen notiert man eigentlich in der functions.php vom Theme. Wenn eine Funktion jedoch nur für eine einzelne Datei bestimmt ist, so kann man diese auch gleich unterhalb des einleitenden Kommentars und noch vor get_header() einfügen. Damit die nicht bei einem Update vom Theme weg ist, würde ich das nicht unbedingt empfehlen. Da auf eine Funktion wie diese direkt zugegriffen wird, macht es praktisch keinen Unterschied, da der Rest ja ebenfalls mit weg wäre.

    Eine Ausgabe, wie mit get_the_content gehört in die Ausgabeschleife The Loop und die beginnt ja eigentlich mit eine while und have_posts()): und endet mit endwhile; dazwischen sollte sich der richtige DIV-Bereich finden lassen.

  • Sorry, irgendwie hilft mir das alles nicht. Es sitzt irgendwo eine Funktion unter dem namen wpe_excerpt, der in excerpts verhindert, dass more-tags im frontent angezeigt werden. Und das möchte ich ändern. Das ist ein sehr spezielles Template, bei dem ich nicht ein funktion ersetzen kann, ohne dass sich das auf verschiedene bereiche auswirkt. so sind die excerpts zum beispiel dreifach in der länge definiert für alle Bereiche wo auf der Seite am Ende welche angezeigt werden sollen.

    the content hilft mir garnicht, weil jede art von formatierung die ich da ändere sich auch auf meine posts im ganzen auswirkt, habe das mit dem freundlicherweise bereit gestellten code getestet.

  • ist das denn garnicht möglich einfach hinter den excerpt einen kurzen code zu packen in den index.php und da einfach weiterlesen stehen zu haben? da muss doch nur die post-id verknüpft sein oder nicht?

  • the content hilft mir garnicht, weil jede art von formatierung die ich da ändere sich auch auf meine posts im ganzen auswirkt, habe das mit dem freundlicherweise bereit gestellten code getestet.


    Kann ich mir irgendwie nicht vorstellen, wenn eine Funktion nicht über eine API hinzugefügt wird, sondern nur in einer Ausgabeschleife in einer Template-Datei aufrufbar ist. Und das Beispiel ist ja so geschrieben, dass die Funktion nicht mit add_filter oder add_action eine API anspricht, sondern direkt nur in einer The Loop von einer Datei aufgerufen wird.

    Und ich verstehe so einiges ohnehin nicht, denn wenn die Probleme mit den HTML-Tags nicht wären, dann brauchte gar keine zusätzliche Funktion zu sein, denn dann solltest Du eigentlich bei get_the_content jeden beliebigen Hinweistext eingeben können, wenn auf eine Translation verzichtet würde. Habe da noch einiges probiert und keinerlei Probleme feststellen können:

    Beispiel:

    PHP
    echo get_the_content('Lesen Sie weiter...');
    
    
    // Ausgabe: Lesen Sie weiter...


    Oder:

    PHP
    echo get_the_content('Mehr zum Thema...');
    
    
    // Ausgabe: Mehr zum Thema...

    Mit (__("...")) wird erst die Translation eingeschaltet, greift aber nur dann, wenn eine entsprechende Übersetzung in einer Sprachdatei vorhanden ist.

    PHP
    echo get_the_content(__("Reply"));
    
    
    // Ausgabe: Antwort

    So würde es nichts mit einer Übersetzung:

    PHP
    echo get_the_content("Reply");
    
    
    // Ausgabe: Reply

    Und alles was in the_content an HTML-Tags oder ausgegebenen Entities vorhanden ist, lässt sich vorher oder bei der Ausgabe wegfiltern. Nur die Filterfunktion muss selbstverständlich nur dort aufgerufen werden, wo diese auch erwünscht ist und nicht in einer anderen Datei.

    Einmal editiert, zuletzt von Melewo (29. Januar 2014 um 20:11)

  • Lösung: Das hier in der functions.php.

    Aufruf dann im Index.

    PHP
    function new_excerpt_more($more) {
           global $post;
        return '<a class="moretag" href="'. get_permalink($post->ID) . '"> Weiterlesen...</a>';
    }
    add_filter('excerpt_more', 'new_excerpt_more');


    Jetzt frage ich mich nur noch warum das bei einigen Artikeln geht, bei anderen nicht. oO Manche bekommmen nicht diese Klammer: [...] egal wie kurz ich die excerpts stelle in den functions.

  • Werden denn alle über das normale the_excerpt() eingebunden, oder ist bei denen wo es nicht geht eine andere Funktion im Spiel (evtl. eigenes Template)?

    Das Geheimnis des Könnens liegt im Wollen!
    [size=12]Bitte keine Hilfegesuche per PN (auch keine "privaten" Links). Das ist ein öffentliches Forum.[/SIZE]

  • egal wie kurz ich die excerpts stelle in den functions.


    Ist ein anderer Weg, greift auf die Funktion wp_trim_excerpt und die ist auf 55 Wörter eingestellt und nicht abhängig vom More-Tag, wenn ich das bisher richtig verstanden habe. Da möchte ich mich nicht festlegen, weil ich damit noch nichts getestet habe. Doch verstehe ich das bislang so, kann mich aber irren, denn wie schon geschrieben, ab und zu verstehe ich einiges nicht von den übersetzten Beschreibungen bevor ich es getestet habe.

    Zitat

    This filter is used by wp_trim_excerpt() function.
    ...

    Code
    add_filter( 'excerpt_more', 'custom_excerpt_more' );

    http://codex.wordpress.org/Plugin_API/Fil…ce/excerpt_more

    PHP
    function wp_trim_excerpt($text = '') {
    ...
        $excerpt_length = apply_filters( 'excerpt_length', 55 );
    ...
  • Da müsste dann noch eine zweite Funktion sein, mit der die Länge eingestellt wird. Oder?
    Ist die bei Dir vorhanden?

    http://www.wp-magazin.info/the_excerpt-anpassen/

    Hier in der anderen Funktion ist excerpt_length mit enthalten, doch wo stellst Du nun die Länge ein?

    Einmal editiert, zuletzt von Melewo (29. Januar 2014 um 21:14)

  • sir Ector: Sind die gleichen Excerptklassen trotzdem bei einigen vorhanden. Das mit den 55 Zeichen erklärt es. In anderen Excerptklassen die kürzer gehalten sind, wird das dennoch berücksichtigt komischerweise.

    in der functions ist hiermit die länge eingestellt:

    Aside bleibt 17 Wörter lang, die anderen berücksichtigen komischerweise offenbar nur diese 55 Zeichen Grenze.

    Einmal editiert, zuletzt von cored (29. Januar 2014 um 21:30)

Jetzt mitmachen!

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