Compare the_excerpt () con the_content ()

8

¿Hay alguna manera de comparar the_excerpt () con the_content () para saber si the_excerpt () realmente muestra todo el contenido de la publicación? por ejemplo, si una publicación fuera particularmente corta.

en última instancia, me gustaría tener un enlace "Leer más" al final de los extractos. pero quiero que diga 1 cosa para las publicaciones y otra para las publicaciones del formato de video (es decir ... 'mira el video' en lugar de 'lee el resto'). pero al mismo tiempo no quiero agregar esto manualmente después del extracto, pero tengo muchas publicaciones que son lo suficientemente cortas como para que no necesiten un enlace 'leer más', ya que the_excerpt muestra la publicación completa.

pero agregar el enlace permanente al filtro excerpt_more no es del todo correcto, ya que no agregará un enlace a las publicaciones de video que no tengan otro contenido.

Así que estoy atrapado entre los dos. espero que tenga sentido. Si no fuera así, es tarde e intentaré volver a explicarlo por la mañana.

helgatheviking
fuente

Respuestas:

7

Lo que intenta hacer con el video es exactamente para lo que se crearon los Formatos de publicación .

Agregue esto a las funciones:

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

Y luego esto para manejar su enlace Leer más:

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

@mrwweb tiene razón, los formatos de publicación son muy útiles en la mayoría de los casos.

Como una solución más genérica, podría combinar the_excerpt()y the_content()en una función:

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

En tu tema llamas ahora ...

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

... en lugar de the_excerpt();.

fuxia
fuente
Solución inteligente con longitud x 1.2. +1
kaiser
de acuerdo, +1 para la comparación de la duración, eso es lo que pensé que quería, pero los formatos de publicación fueron el camino correcto
helgatheviking