Compare o the_excerpt () com o the_content ()

8

Existe uma maneira de comparar o the_excerpt () ao the_content () para saber se o the_excerpt () está realmente mostrando todo o conteúdo da postagem? por exemplo, se um post foi particularmente curto.

Por fim, gostaria de ter um link "Leia mais" no final de trechos. mas eu quero dizer 1 coisa para postagens e outra para postagens do formato de vídeo (ou seja, "assistir ao vídeo" em vez de "ler o resto"). mas ao mesmo tempo eu não quero colocar isso manualmente após o trecho, mas eu tenho muitos posts que são curtos o suficiente, eles não precisam de um link 'leia mais', já que o_exemplo mostra o post completo.

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

então eu estou preso entre os dois. Espero que tenha feito sentido. se não for tarde e vou tentar explicar de manhã.

    
por helgatheviking 10.05.2012 / 06:17

2 respostas

7

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

Adicione isto às funções:

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

E então isso para lidar com o link "Ler 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>';
}
    
por mrwweb 10.05.2012 / 07:06
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 a função the_excerpt() e the_content() em uma :

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ê liga agora ...

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

… em vez de the_excerpt(); .

    
por fuxia 10.05.2012 / 07:37

Tags