Confronta the_excerpt () con the_content ()


8

C'è un modo per confrontare the_excerpt () con the_content () per sapere se the_excerpt () sta effettivamente mostrando l'intero contenuto del post? per esempio, se un post fosse particolarmente breve.

alla fine mi piacerebbe avere un link "Leggi di più" alla fine degli estratti. ma voglio che dica 1 cosa per i post e un'altra per i post in formato video (cioè ... "guarda il video" invece di "leggi il resto"). ma allo stesso tempo non voglio affrontarlo manualmente dopo l'estratto, ma ho un sacco di post che sono abbastanza corti che non hanno bisogno di un link "leggi di più", poiché the_excerpt visualizza l'intero post.

ma aggiungere il permalink al filtro excerpt_more non è del tutto corretto poiché non aggiungerà un link ai post del video che non ha altri contenuti.

quindi sono bloccato tra i due. spero che abbia senso. in caso contrario è tardi e cercherò di spiegare nuovamente al mattino.

Risposte:


7

Quello che stai cercando di fare con il video è esattamente ciò che i formati Post sono stati creati per gestire.

Aggiungi questo alle funzioni:

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

E quindi questo per gestire il tuo collegamento Altre informazioni:

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

6

@mrwweb ha ragione, i formati dei post sono molto utili nella maggior parte dei casi.

Come soluzione più generica puoi combinare the_excerpt()e the_content()in una sola funzione:

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

Nel tuo tema chiami ora ...

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

... invece di the_excerpt();.


Soluzione intelligente con lunghezza x 1,2. +1
kaiser,

d'accordo, +1 per il confronto della lunghezza, è una specie di cosa pensavo di volere, ma i formati dei post erano davvero la strada giusta da percorrere
helgatheviking
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.