Comparez the_excerpt () à the_content ()

8

Existe-t-il un moyen de comparer the_excerpt () à the_content () pour savoir si the_excerpt () affiche réellement tout le contenu du message? par exemple, si un poste était particulièrement court.

en fin de compte, j'aimerais avoir un lien "En savoir plus" à la fin des extraits. mais je veux qu'il dise 1 chose pour les publications et une autre pour les publications au format vidéo (c'est-à-dire ... "regarder la vidéo" au lieu de "lire le reste"). mais en même temps, je ne veux pas aborder cela manuellement après l'extrait, mais j'ai beaucoup de messages assez courts, ils n'ont pas besoin d'un lien `` en savoir plus '', car the_excerpt affiche le message complet.

mais l'ajout du permalien au filtre excerpt_more n'est pas tout à fait correct car il n'ajoutera pas de lien vers les publications vidéo qui n'ont pas d'autre contenu.

donc je suis coincé entre les deux. j'espère que cela avait du sens. si ce n'est pas le cas, il est tard et je vais essayer de ré-expliquer le matin.

helgatheviking
la source

Réponses:

7

Ce que vous essayez de faire avec la vidéo est exactement ce que les formats de publication ont été créés pour gérer.

Ajoutez ceci aux fonctions:

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

Et puis ceci pour gérer votre lien Lire la suite:

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
la source
6

@mrwweb a raison, les formats de publication sont très utiles dans la plupart des cas.

En tant que solution plus générique, vous pouvez combiner the_excerpt()et the_content()dans une seule fonction:

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;
}

Dans votre thème, vous appelez maintenant…

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

… Au lieu de the_excerpt();.

fuxia
la source
Solution intelligente avec longueur x 1,2. +1
kaiser
d'accord, +1 pour la comparaison de la longueur, c'est en quelque sorte ce que je pensais vouloir, mais les formats de message étaient en effet la bonne voie à suivre
helgatheviking