如何在wordpress中设置the_content()和the_excerpt()的字符限制

时间:2010-06-30 09:16:19

标签: php wordpress

如何在wordpress中的the_content()和the_excerpt()上设置字符限制?我只找到了字数限制的解决方案 - 我希望能够设置输出的确切数量字符。

10 个答案:

答案 0 :(得分:27)

您可以使用Wordpress过滤器回调函数。在主题目录中,创建一个名为functions.php的文件,并在以下位置添加以下内容:

<?php   
  add_filter("the_content", "plugin_myContentFilter");

  function plugin_myContentFilter($content)
  {
    // Take the existing content and return a subset of it
    return substr($content, 0, 300);
  }
?>

每次通过plugin_myContentFilter()请求帖子/页面的内容时,都会调用the_content()函数 - 它会为您提供内容作为输入,并将使用您从函数返回的任何内容用于后续输出或其他过滤功能。

您也可以对the_exercpt() - add_filter()执行相同的操作,然后使用一个函数作为回调。

有关详细信息,请参阅Wordpress filter reference docs

答案 1 :(得分:25)

甚至更简单,无需创建过滤器:使用PHP的mb_strimwidth将字符串截断为特定宽度(长度)。只需确保使用get_语法之一。 例如,内容:

<?php $content = get_the_content(); echo mb_strimwidth($content, 0, 400, '...');?>

这会将字符串剪切为400个字符,然后用...将其关闭。 只需使用get_permalink()指向永久链接,即可在末尾添加“阅读更多”链接。

<a href="<?php the_permalink() ?>">Read more </a>

当然你也可以在第一行建立read more。而不仅仅用'...'

替换'<a href="' . get_permalink() . '">[Read more]</a>'

答案 2 :(得分:16)

这也可以平衡HTML标记,这样它们就不会被打开,也不会破坏文字。

add_filter("the_content", "break_text");
function break_text($text){
    $length = 500;
    if(strlen($text)<$length+10) return $text;//don't cut if too short

    $break_pos = strpos($text, ' ', $length);//find next space after desired length
    $visible = substr($text, 0, $break_pos);
    return balanceTags($visible) . " […]";
} 

答案 3 :(得分:8)

wp_trim_words此功能将文本修剪为一定数量的单词并返回修剪过的文本。

实施例: -

echo wp_trim_words( get_the_content(), 40, '...' );

答案 4 :(得分:3)

使用the_content()功能(用于显示页面的主要内容)

$content = get_the_content();

echo substr($content, 0, 100);

使用the_excerpt()功能(用于显示页面的摘录内容)

$excerpt= get_the_excerpt();

echo substr($excerpt, 0, 100);

答案 5 :(得分:2)

<?php the_content();?>替换为以下代码

<?php
$char_limit = 100; //character limit
$content = $post->post_content; //contents saved in a variable
echo substr(strip_tags($content), 0, $char_limit);
?>

php substr() function refrence

php strip_tags() function refrence

答案 6 :(得分:0)

只是为了帮助,如果有人想限制帖子长度为home page ..那么可以使用下面的代码来做到这一点..

以下代码只是对@bfred.it Sir

的修改
add_filter("the_content", "break_text");

function limit_text($text){

  if(is_front_page())
  {
    $length = 250;
    if(strlen($text)<$length+10) return $text; //don't cut if too short
    $break_pos = strpos($text, ' ', $length); //find next space after desired length
    $visible = substr($text, 0, $break_pos);
    return balanceTags($visible) . "... <a href='".get_permalink()."'>read more</a>";
  }else{
    return $text;
  }

}

答案 7 :(得分:0)

<?php 
echo apply_filters( 'woocommerce_short_description', substr($post->post_excerpt, 0, 500) ) 
?>

答案 8 :(得分:0)

wp_trim_words()此功能将文本修剪为一定数量的单词,并返回修剪后的文本。

$excerpt = wp_trim_words( get_the_content(), 40, '<a href="'.get_the_permalink().'">More Link</a>');

使用mb_strimwidth() php函数获取具有指定宽度的截断字符串。

$excerpt = mb_strimwidth( strip_tags(get_the_content()), 0, 100, '...' );

add_filter()过滤器挂钩上使用WordPress的the_content方法。

add_filter( "the_content", "limit_content_chr" );
function limit_content_chr( $content ){
    if ( 'post' == get_post_type() ) {
        return mb_strimwidth( strip_tags($content), 0, 100, '...' );
    } else {
        return $content;
    }
}

使用自定义php函数限制内容字符。

function limit_content_chr( $content, $limit=100 ) {
    return mb_strimwidth( strip_tags($content), 0, $limit, '...' );
}

// using above function in template tags
echo limit_content_chr( get_the_content(), 50 );

答案 9 :(得分:0)

我知道这篇文章有点旧,但我想我会添加我使用的函数,这些函数会考虑到您想要安全排除的任何过滤器和任何 <![CDATA[some stuff]]> 内容。

只需添加到您的functions.php文件并在您想要的任何地方使用,例如:

content(53);

excerpt(27);

享受吧!

//limit excerpt
function excerpt($limit) {
  $excerpt = explode(' ', get_the_excerpt(), $limit);
  if (count($excerpt)>=$limit) {
    array_pop($excerpt);
    $excerpt = implode(" ",$excerpt).'...';
  } else {
    $excerpt = implode(" ",$excerpt);
  } 
  $excerpt = preg_replace('`\[[^\]]*\]`','',$excerpt);
  return $excerpt;
}

//limit content 
function content($limit) {
  $content = explode(' ', get_the_content(), $limit);
  if (count($content)>=$limit) {
    array_pop($content);
    $content = implode(" ",$content).'...';
  } else {
    $content = implode(" ",$content);
  } 
  $content = preg_replace('/\[.+\]/','', $content);
  $content = apply_filters('the_content', $content); 
  $content = str_replace(']]>', ']]&gt;', $content);
  return $content;
}