自定义wp_trim_words()函数未向右裁切

时间:2014-07-15 作者:mcography

我有这个习惯wp_trim_words() 函数集只提供20个单词的摘录,在大多数情况下,它工作得很好。除某些原因外,在包含列表的帖子上,它输出的单词超过20个。(See the posts at the bottom of this page.) 我怎样才能解决这个问题?我试图删除<ul>,<ol>,<li>,function insight_allowedtags() 但那没什么用。

理想情况下,我希望自定义摘录输出至少20个单词,并在句子末尾结束,无论帖子是否包含列表。

这是我正在使用的自定义函数(as suggested in this post):

// Custom Excerpt for Insights Posts on Insights Page & Category Pages
function insight_allowedtags() {
    // Add custom tags to this string
        return \'<script>,<style>,<span>,<ul>,<ol>,<li>,<a>,<p>\'; 
    }

if ( ! function_exists( \'insight_custom_wp_trim_excerpt\' ) ) : 

    function insight_custom_wp_trim_excerpt($insight_excerpt) {
    global $post;
    $raw_excerpt = $insight_excerpt;
        if ( \'\' == $insight_excerpt ) {

            $insight_excerpt = get_the_content(\'\');
            $insight_excerpt = strip_shortcodes( $insight_excerpt );
            $insight_excerpt = apply_filters(\'the_content\', $insight_excerpt);
            $insight_excerpt = str_replace(\']]>\', \']]&gt;\', $insight_excerpt);
            $insight_excerpt = strip_tags($insight_excerpt, insight_allowedtags()); /*IF you need to allow just certain tags. Delete if all tags are allowed */

            //Set the excerpt word count and only break after sentence is complete.
                $excerpt_word_count = 20;
                $excerpt_length = apply_filters(\'excerpt_length\', $excerpt_word_count); 
                $tokens = array();
                $excerptOutput = \'\';
                $count = 0;

                // Divide the string into tokens; HTML tags, or words, followed by any whitespace
                preg_match_all(\'/(<[^>]+>|[^<>\\s]+)\\s*/u\', $insight_excerpt, $tokens);

                foreach ($tokens[0] as $token) { 

                    if ($count >= $excerpt_word_count && preg_match(\'/[\\,\\;\\?\\.\\!]\\s*$/uS\', $token)) { 
                    // Limit reached, continue until , ; ? . or ! occur at the end
                        $excerptOutput .= trim($token);
                        break;
                    }

                    // Add words to complete sentence
                    $count++;

                    // Append what\'s left of the token
                    $excerptOutput .= $token;
                }

            $insight_excerpt = trim(force_balance_tags($excerptOutput));

                // $excerpt_end = \' <a href="\'. esc_url( get_permalink() ) . \'">\' . sprintf(__( \'Read more about %s &nbsp;&raquo;\', \'wpse\' ), get_the_title()) . \'</a>\'; 
                // $excerpt_more = apply_filters(\'excerpt_more\', \' \' . $excerpt_end); 

                //$pos = strrpos($wpse_excerpt, \'</\');
                //if ($pos !== false)
                // Inside last HTML tag
                //$wpse_excerpt = substr_replace($wpse_excerpt, $excerpt_end, $pos, 0); /* Add read more next to last word */
                //else
                // After the content
                $insight_excerpt .= $excerpt_end; /*Add read more in new paragraph */

            return $insight_excerpt;   

        }
        return apply_filters(\'insight_custom_wp_trim_excerpt\', $insight_excerpt, $raw_excerpt);
    }

endif;

remove_filter(\'get_the_excerpt\', \'wp_trim_excerpt\');
add_filter(\'get_the_excerpt\', \'wpse_custom_wp_trim_excerpt\', \'blog_custom_wp_trim_excerpt\', \'event_custom_wp_trim_excerpt\', \'insight_custom_wp_trim_excerpt\'); 

1 个回复
SO网友:MIC

在函数中使用此函数怎么样。php:

function new_excerpt_length($length) {
    return 20;
}
add_filter(\'excerpt_length\', \'new_excerpt_length\');
然后通过添加<?php the_excerpt()?> 到php模板?

或:

<?php $string = get_the_excerpt(); if (strlen($string) <=20) {echo \'\' . $string . \'\';} else {echo \'\' . substr($string, 0, 20) . \'...\';}?>
在本例中,20是个字符

结束

相关推荐

Sort Posts By Category?

谷歌搜索了几个小时,找不到解决方案。在我的theme 你有一个Browse 从我正在处理的自定义帖子类型中提取所有视频的页面。如果用户制作了30个类别,那么我希望用户能够使用顶部列出的类别按钮对视频进行排序。如果他们点击Horror 我想循环显示所有Horror 视频。如何在此循环中使用类别对视频进行排序?BROWSE PAGE我的类别ul li a<ul class=\"sort-by-category\"> <? $args = array(&#x