不删节词语的摘录

时间:2011-02-14 作者:Eeyore

我知道我可以使用filter, 但是,它会全局设置长度。就我而言,我在三个不同的页面上有不同长度的摘录。

这就是我现在拥有的。我想改进它,这样它就不会截断单词。

$content_to_excerpt = strip_tags( strip_shortcodes( get_the_content() ) );
$pos = strpos($content_to_excerpt, \' \', 160);
if ($pos !== false) {
 echo  "<p>" . substr($content_to_excerpt, 0, $pos) . "...</p>";
}

2 个回复
最合适的回答,由SO网友:Annika Backstrom 整理而成

根据正在加载的页面动态设置过滤器。如果类别存档页面有100字的摘录,但帖子有10字的摘录,而其他所有内容都使用默认值:

function my_custom_excerpt_length( $orig ) {
    if( is_category() ) {
        return 100;
    } elseif( is_single() ) {
        return 10;
    }

    return $orig;
}
add_filter( \'excerpt_length\', \'my_custom_excerpt_length\' );
您可以获得更具体的内容,为特定类别赋予不同的长度。

响应Rarst,一个新的模板函数the_excerpt_length() 用于输出特定字数的摘录:

// Excerpt with a specific number of words, i.e. the_excerpt( 100 );
function the_excerpt_length( $words = null ) { 
    global $_the_excerpt_length_filter;

    if( isset($words) ) { 
        $_the_excerpt_length_filter = $words;
    }   

    add_filter( \'excerpt_length\', \'_the_excerpt_length_filter\' );
    the_excerpt();
    remove_filter( \'excerpt_length\', \'_the_excerpt_length_filter\' );

    // reset the global
    $_the_excerpt_length_filter = null;
}

function _the_excerpt_length_filter( $default ) { 
    global $_the_excerpt_length_filter;

    if( isset($_the_excerpt_length_filter) ) { 
        return $_the_excerpt_length_filter;
    }   

    return $default;
}
这将在模板文件中使用,即:

<div class="entry">
    <?php the_excerpt_length( 25 ); ?>
</div>

SO网友:Fernando Briano

我知道我以前在StackOverflow上见过这个问题。并非特定于WordPress摘录,而是关于在PHP上截断字符串而不截断单词。回顾StackOverflow本身,我发现this link 在这个问题上很有帮助。

此处使用的代码为:

// Original PHP code by Chirp Internet: www.chirp.com.au
// Please acknowledge use of this code by including this header. 
function myTruncate($string, $limit, $break=".", $pad="...") { 
  // return with no change if string is shorter than $limit
  if(strlen($string) <= $limit) return $string;

  // is $break present between $limit and the end of the string?
  if(false !== ($breakpoint = strpos($string, $break, $limit))) {
    if($breakpoint < strlen($string) - 1) {
      $string = substr($string, 0, $breakpoint) . $pad; 
    } 
  } 
  return $string; 
}
希望这有帮助!

结束

相关推荐

Automating Excerpt

我正在努力automate 编辑通过自动化工作excerpts.我的解决方案可行,但几乎没有问题:如果一篇文章开头有图像/破坏的html,它会破坏版面。子字符串剪切单词。是否有更好的解决方案来自动化摘录或改进现有代码?<?php if(!empty($post->post_excerpt)) { the_excerpt(); } else { echo \"<p>\".substr(get_the