Сравните the_excerpt () с the_content ()


8

Есть ли способ сравнить the_excerpt () с the_content (), чтобы узнать, действительно ли the_excerpt () показывает весь пост? например, если сообщение было особенно коротким.

в конце концов я хотел бы иметь ссылку «Читать дальше» в конце выдержки. но я хочу, чтобы он сказал одну вещь для постов, а другую для постов в видеоформате (то есть ... «смотреть видео» вместо «читать остальные»). но в то же время я не хочу ставить это вручную после выдержки, но у меня достаточно постов, которые достаточно короткие, им не нужна ссылка «читать дальше», так как the_excerpt отображает полный пост.

но добавлять постоянную ссылку в фильтр excerpt_more не совсем правильно, поскольку она не добавит ссылку на видео-посты, которые не имеют другого контента.

так что я застрял между ними. Я надеюсь, что это имело смысл. если не поздно, то поздно, и утром я попытаюсь объяснить.

Ответы:


7

То, что вы пытаетесь сделать с видео, это именно то, для чего были созданы форматы постов.

Добавьте это к функциям:

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

А затем это для обработки вашей ссылки Подробнее:

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 прав, форматы сообщений очень полезны в большинстве случаев.

В качестве более общего решения вы можете объединить the_excerpt()и the_content()в одну функцию:

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

В вашей теме вы звоните сейчас ...

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

... вместо the_excerpt();.


Умное решение с длиной х 1,2. +1
кайзер

согласился, +1 для сравнения длины, это то, что я думал, что хотел, но форматы сообщений действительно были верным путем
helgatheviking
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.