Compare the_excerpt () com the_content ()

8

Existe uma maneira de comparar the_excerpt () com o_content () para saber se o_excerpt () está realmente mostrando todo o conteúdo da postagem? por exemplo, se uma postagem for particularmente curta.

finalmente, eu gostaria de ter um link "Leia mais" no final dos trechos. mas quero que ele diga uma coisa para as postagens e outra para as postagens do formato de vídeo (ou seja, ... 'assista ao vídeo' em vez de 'leia o resto'). mas, ao mesmo tempo, não quero colocar isso manualmente manualmente depois do trecho, mas tenho muitas postagens curtas o suficiente para que não precisem de um link 'leia mais', pois the_excerpt exibe a postagem completa.

mas adicionar o permalink ao filtro excerpt_more não está certo, pois não adiciona um link para as postagens em vídeo que não possuem outro conteúdo.

então eu estou preso entre os dois. Espero que isso faça sentido. caso contrário, é tarde e tentarei explicar novamente pela manhã.

helgatheviking
fonte

Respostas:

7

O que você está tentando fazer com o vídeo é exatamente com o que os Formatos de Post foram criados para lidar.

Adicione isso às funções:

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

E então, para tratar do seu link Leia mais:

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
fonte
6

@mrwweb está certo, os formatos de postagem são muito úteis na maioria dos casos.

Como uma solução mais genérica, você pode combinar the_excerpt()e the_content()em uma função:

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

No seu tema você chama agora ...

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

... em vez de the_excerpt();.

fuxia
fonte
Solução inteligente com comprimento x 1,2. +1
kaiser
concordou, +1 para a comparação comprimento, que é uma espécie do que eu pensei que eu queria, mas formatos pós eram de fato o caminho certo a seguir
helgatheviking