Vergleiche the_excerpt () mit the_content ()

8

Gibt es eine Möglichkeit, the_excerpt () mit the_content () zu vergleichen, um festzustellen, ob the_excerpt () tatsächlich den gesamten Beitragsinhalt anzeigt? Zum Beispiel, wenn ein Beitrag besonders kurz wäre.

Letztendlich möchte ich am Ende von Auszügen einen "Read more" -Link haben. aber ich möchte, dass es eine Sache für Beiträge und eine andere für Beiträge des Videoformats sagt (dh ... "Video ansehen" statt "den Rest lesen"). aber gleichzeitig möchte ich dies nach dem Auszug nicht manuell anheften, aber ich habe viele Beiträge, die kurz genug sind, dass sie keinen 'read more'-Link benötigen, da the_excerpt den vollständigen Beitrag anzeigt.

Das Hinzufügen des Permalinks zum Filter excerpt_more ist jedoch nicht ganz richtig, da kein Link zu den Videopostings hinzugefügt wird, die keinen anderen Inhalt haben.

Also stecke ich zwischen den beiden fest. Ich hoffe das hat Sinn gemacht. Wenn es nicht spät ist, werde ich versuchen, es am Morgen noch einmal zu erklären.

Helgatheviking
quelle

Antworten:

7

Was Sie mit dem Video versuchen, ist genau das, wofür Post-Formate erstellt wurden.

Fügen Sie dies zu Funktionen hinzu:

add_theme_support( 'post-formats', array( 'video' ) );

Und dann dies, um Ihren Read More-Link zu bearbeiten:

if( !has_post_format( 'video' ) ) {
    echo '<a href="' . get_permalink() . '">Read More&hellip;</a>';
} else {
    echo '<a href="' . get_permalink() . '">Watch the Video&hellip;</a>';
}
mrwweb
quelle
6

@mrwweb ist richtig, Postformate sind in den meisten Fällen sehr nützlich.

Als allgemeinere Lösung können Sie the_excerpt()und the_content()in einer Funktion kombinieren :

function wpse_51699_conditional_excerpt( $more_link_text = null, $stripteaser = false )
{
    $excerpt = apply_filters( 'the_excerpt', get_the_excerpt() );

    $content = get_the_content( $more_link_text, $stripteaser );
    $content = apply_filters('the_content', $content);
    $content = str_replace(']]>', ']]&gt;', $content);

    $stripped_content = strip_tags( $content );
    $content_length   = mb_strlen( $stripped_content, 'utf-8' );
    $excerpt_length   = mb_strlen( $excerpt, 'utf-8' );

    // $content is just 20% longer than excerpt. Adjust this to your needs.
    if ( ( $excerpt_length * 1.2 ) >= $content_length )
    {
        print $content;
        return;
    }
    echo $excerpt . $more_link_text;
}

In deinem Thema rufst du jetzt an…

wpse_51699_conditional_excerpt( sprintf( '<a href="%1$s">Read more</a>', get_permalink() ) );

… Statt the_excerpt();.

Fuxia
quelle
Intelligente Lösung mit Länge x 1,2. +1
Kaiser
stimmte zu, +1 für den Längenvergleich, das war genau das, was ich wollte, aber
Postformate