问题描述

有没有办法将 the_excerpt() 与 the_content() 进行比较,以确定是否显示 the_excerpt() 的整个帖子内容?例如,如果一个职位特别短。

最终我想在截图的末尾有一个”Read more” 链接。但是我想让它说 1 个帖子,另一个是视频格式的帖子 (即…「观看视频」,而不是 「阅读其余」) 。但同时我也不想在摘录之后手动打这个,但是我有足够的帖子足够短,不需要’read more’ 链接,因为 the_excerpt 显示完整的帖子。

但是添加固定链接到 excerpt_more 过滤器是不正确的,因为它不会添加到没有其他内容的视频帖子的链接。

所以我被困在两者之间。我希望是有道理的。如果没有’t it’s 晚了,我会尽量在早上去 re-explain 。

最佳解决方案

您正在尝试的视频正是为了处理 Post Formats 而设计的。

将其添加到函数中:

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

次佳解决方案

@mrwweb 是对的,post 格式在大多数情况下非常有用。

作为一个更通用的解决方案,您可以将 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();

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。