格式化 Genesis 的 Content Limit 输出

/

格式化 Genesis 的 Content Limit 输出

wordpress 著名主题框架 Genesis 的内容输出除了全文输出和摘要输出外,还有另外一种输出方式叫做 Content Limit,设置非常具有弹性,可以为不同的 widget 指定不同的截断长度,不过截断方式对中文不太友好,对 UTF-8 支持的不够,下面的代码就是为了解决这个问题,在主题的 functions.php 中添加后,能够完美格式化 Content Limit 输出。

add_filter('get_the_content_limit', 'custom_genesis_content_limit', 10, 4);
function custom_genesis_content_limit($output, $content, $link, $max_characters){
    global $more;
    $more = 1;
    $content = get_the_content('', FALSE);
    $content = strip_tags( strip_shortcodes($content) );
    $content = preg_replace('/\[\/?cc.*?\]/', '', $content);
    $content = trim( preg_replace( '/<(s(cript|tyle))(\s\S)*?<\/\1>/i', '', $content ) );
    $more = strpos($content, 'class="more-link"');
    if ( mb_strlen( $content, 'utf-8' ) > $max_characters ) {
        $content = mb_substr( $content, 0, $max_characters + 1, 'utf-8' );
        $position = max( mb_strrpos( $content, '。',0,'utf-8' ), mb_strrpos( $content, ',',0,'utf-8' ), mb_strrpos( $content, ' ',0,'utf-8' ));
        if($position == 0) $position = $max_characters + 1;
        $content = trim(mb_substr( $content, 0, $position, 'utf-8' ));
        $output = sprintf( '<p>%s %s</p>', $content, $link );  
    } else {
        $output = sprintf( '<p>%s</p>', $content );
    }
    return $output;
}

Comments