Forums

Possible to have 2 excerpt lengths? (9 posts)

  1. wphax
    Member
    Posted 1 year ago #

    I'm using this code to make my post excerpts shorter:

    <?php function new_excerpt_length($length) {
    	return 13;
    }
    add_filter('excerpt_length', 'new_excerpt_length'); ?>
    <?php remove_filter('the_excerpt', 'wpautop'); ?>

    But there are 2 sections on my blog that require different excerpt lengths. Is it possible to specify 2 excerpt lengths so that I can specify in one of my loops to use the excerpt length from one function and another excerpt length for the other section of my blog?

    PS: There are 3 loops on my homepage, but I'm only worried about 2.

  2. ucfknight10
    Member
    Posted 1 year ago #

    function new_excerpt_length($length) {
    	global $post;
    	if ($post->post_type == 'post')
    		return 13;
    	else if ($post->post_type == 'post_2')
    		return 26;
    	else if ($post->post_type == 'post_3')
    		return 39;
    	else
    		return 55;
    }
    add_filter('excerpt_length', 'new_excerpt_length');
  3. ucfknight10
    Member
    Posted 1 year ago #

    and you might want to add a priority argument to your add_filter statement, just to be safe, as shown here: http://codex.wordpress.org/Plugin_API/Filter_Reference/excerpt_length

  4. seanjacob
    Member
    Posted 1 year ago #

    This is what I need but I am not understanding the post type =='post_2' coding.

    I have looked at the codex page but still not fully understanding.

    http://codex.wordpress.org/Post_Types

  5. ambrosite
    Member
    Posted 1 year ago #

    A custom post type just to get a different excerpt length? I wouldn't do it that way. Just apply truncation right at the point in your template where you need it. The following will output the excerpt, truncated to the nearest whole word under the length you specify (75 characters in this example, but you can put whatever number you want in there):

    <?php echo substr( get_the_excerpt(), 0, strrpos( substr( get_the_excerpt(), 0, 75), ' ' ) ); ?>

  6. seanjacob
    Member
    Posted 1 year ago #

    Thank you for the reply, I also have been doing some research.

    This is simpler
    <?php echo substr(get_the_excerpt(), 0,30); ?>

    Could also make it a function which also ends with a full word.

    function get_the_other_excerpt(){
    $excerpt = get_the_content();
    $excerpt = strip_shortcodes($excerpt);
    $excerpt = strip_tags($excerpt);
    $the_str = substr($excerpt, 0, 50);
    $the_str = trim(preg_replace( '/\s+/', ' ', $the_str));
    return $the_str;
    }

    Call
    <?php echo get_the_other_excerpt(); ?>

  7. ambrosite
    Member
    Posted 1 year ago #

    The intent of my less simple approach is to truncate a string to the nearest whole word, rather than cutting off in the middle of a word. I explain my reasoning here:

    http://www.ambrosite.com/blog/truncate-long-titles-to-the-nearest-whole-word-using-php-strrpos

    Your example function is good, though. Stripping out the shortcodes and tags can be important in some situations.

  8. seanjacob
    Member
    Posted 1 year ago #

    My apologies ambrosite I didn't realise your code was doing that, I am still learning. Also nice blog post.

  9. seanjacob
    Member
    Posted 1 year ago #

    Update to my code.

    function get_the_popular_excerpt(){
    $excerpt = get_the_content();
    $excerpt = preg_replace(" (\[.*?\])",'',$excerpt);
    $excerpt = strip_shortcodes($excerpt);
    $excerpt = strip_tags($excerpt);
    $excerpt = substr($excerpt, 0, 40);
    $excerpt = substr($excerpt, 0, strripos($excerpt, " "));
    $excerpt = trim(preg_replace( '/\s+/', ' ', $excerpt));
    $excerpt = $excerpt.'... <a href="'.$permalink.'">more</a>';
    return $excerpt;
    }

Topic Closed

This topic has been closed to new replies.

About this Topic

Tags

No tags yet.