限制帖子内容中的字数,并添加阅读更多链接

时间:2012-10-14 作者:Juliver Galleto

正如您在代码中看到的,例程是显示具有id 属于266. 现在我只想限制该帖子内容中显示的单词。比方说,我想把单词限制在300个以内,然后添加一个阅读更多链接。

这是我到目前为止得到的代码:

    $post_id = 266;
    echo "<div id=\'widgets-wrapper3\'><div id=\'marginwidgets\' style=\'overflow: auto; max-width: 100%; margin: 0 auto; border: none !important;\'>";

    $queried_post = get_post($post_id); 
    echo "<div class=\'thewidgets\'>";
    echo $queried_post->post_content;
    echo \'</div>\';

    echo "</div></div>";    
?>

2 个回复
SO网友:Anh Tran

我对帖子的摘录和内容总是有同样的问题。正如@kaiser指出的,有各种各样的钩子和函数用于此目的。但有时他们并不完全按照我的意愿行事。

这是我的解决方案,我编写了自己的函数,用于获取帖子内容,并将其截断为指定的字数:

function wpse69204_excerpt( $num_words = 20, $ending = \'...\', $post_id = null )
{
    global $post;

    // Truncate post content
    $current_post = $post_id ? get_post( $post_id ) : $post;
    $excerpt = strip_shortcodes( $current_post->post_content );
    $excerpt = wp_trim_words( $excerpt, $num_words, $ending );

    // Read more link
    $excerpt .= \'<a href="\' . get_permalink( $post ) . \'" title="">Continue reading...</a>\';

    return $excerpt;
}

SO网友:kaiser

有三个过滤器控制»更多«链接,具体取决于使用的函数/模板标记。糟糕的是,他们互相拦截。好的是,您可以使用current_filter() 检索当前连接的筛选器的名称并修改输出。

然后我们得到了\'excerpt_length\'-筛选以限制摘录长度。这一个不允许我们添加永久链接,但它可以帮助我们与其他过滤器结合使用。请参阅2插件。

permalink more插件此插件将permalink添加到内容或摘录中,具体取决于显示的内容。它还重置excerpt_more-过滤以不输出任何内容,因此不会干扰其他过滤器。

<?php
/** Plugin Name: (#69204) »kaiser« Adds a permalink to the excerpt & content */

/**
 * Alters the display of the "more" link
 * 
 * @param  string $permalink
 * @param  string $text
 * @return string $html
 */
function wpse69204_more_link( $output )
{
    $html .= \'<span class="post-more">&nbsp;\';
    $html .= sprintf(
        \'<a href="%s#more-%s" class="more-link" title="read more" >\'
        ,get_permalink()
        ,get_the_ID()
    );
    $html .= \'</a></span>\';

    // Override \'excerpt_more\'
    if ( \'excerpt_more\' === current_filter() )
        return;

    // Strip the content for the `get_the_excerpt` filter.
    $output = wp_trim_words( $output, 300 );

    // Append for the excerpt
    if ( \'get_the_excerpt\' === current_filter() )
        return $output.$html;

    // The permalink for the `the_content_more_link`-filter.
    return $html;
}
# "More" link for the content
add_filter( \'the_content_more_link\', \'wpse69204_more_link\' );
add_filter( \'get_the_excerpt\', \'wpse69204_more_link\' );
add_filter( \'excerpt_more\', \'wpse69204_more_link\' );
如果您只想修改摘录的长度,可以使用更简单的过滤器设置。下面的插件做得很好。它将内容(我们在循环中,可以访问post数据)减少到300字。在下一步中,它统计每个单词的字母。然后它只返回这个(动态分配的)数字。

<?php
/** Plugin Name: (#69204) »kaiser« Limit excerpt length by word count */

function wpse69204_excerpt_length( $length )
{
    $to_count = array_splice( get_the_content(), 300 );
    $i = 0;
    foreach ( $to_count as $word )
    {
        $i += strlen( $word );
    }

    return $i;
}
add_filter( \'excerpt_length\', \'wpse69204_excerpt_length\' );
注:两个插件都是“零配置”。只需上传、激活、完成即可the_content() 或the_excerpt() 在你的主题中使用这个插件

结束

相关推荐

Mass update excerpt

我正在使用一个photoblog主题,在创建一篇新文章时,它会获取文章附件,并将修改后的“img src”字符串保存到摘录字段中。然后使用<?php the_excerpt(); ?> 在主页菜单、类别页面和标记存档等页面上显示缩略图。我的网站上有几百张照片,主题并没有追溯性地为旧帖子创建基于摘录的缩略图。开发人员不再正式支持这个主题,在浏览了他们的支持论坛部分后,他们甚至承认“很遗憾,我不知道如何创建旧的缩略图。”--引文:http://everydays.hassii.com/