web-dev-qa-db-fra.com

Comparez the_excerpt () à the_content ()

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

finalement, j'aimerais avoir un lien "Lire la suite" à la fin des extraits. mais je veux qu'il dise 1 chose pour les articles et une autre pour les articles du format vidéo (c'est-à-dire "regardez la vidéo" au lieu de "lisez le reste"). mais en même temps, je ne veux pas clouer cela manuellement après l'extrait, mais j'ai beaucoup de posts assez courts, ils n'ont pas besoin d'un lien "lire plus", car the_excerpt affiche l'intégralité du post.

mais l'ajout du permalien au filtre excerpt_more n'est pas tout à fait correct, car cela 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 j'essaierai de m'expliquer à nouveau dans la matinée.

8
helgatheviking

Ce que vous essayez de faire avec la vidéo, c’est exactement ce que Post Formats 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 Read More:

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

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

Comme solution plus générique, vous pouvez combiner les fonctions the_excerpt() et the_content() dans one function:

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();.

6
fuxia