Display post excerpts, limited by word count

冷暖自知 提交于 2019-12-23 21:25:00

问题


I am working on my php website (Not a Wordpress site) on the main index I display the two newest post. The thing is on the description it shows the entire article I find myself needing to display post excerpts maybe 35 word limit.

<?=$line["m_description"]?>

<?
$qresult3 = mysql_query("SELECT * FROM t_users WHERE u_id=".$line["m_userid"]." LIMIT 1");
if (mysql_num_rows($qresult3)<1) { ?>

回答1:


<?php

// just the excerpt
function first_n_words($text, $number_of_words) {
   // Where excerpts are concerned, HTML tends to behave
   // like the proverbial ogre in the china shop, so best to strip that
   $text = strip_tags($text);

   // \w[\w'-]* allows for any word character (a-zA-Z0-9_) and also contractions
   // and hyphenated words like 'range-finder' or "it's"
   // the /s flags means that . matches \n, so this can match multiple lines
   $text = preg_replace("/^\W*((\w[\w'-]*\b\W*){1,$number_of_words}).*/ms", '\\1', $text);

   // strip out newline characters from our excerpt
   return str_replace("\n", "", $text);
}

// excerpt plus link if shortened
function truncate_to_n_words($text, $number_of_words, $url, $readmore = 'read more') {
   $text = strip_tags($text);
   $excerpt = first_n_words($text, $number_of_words);
   // we can't just look at the length or try == because we strip carriage returns
   if( str_word_count($text) !== str_word_count($excerpt) ) {
      $excerpt .= '... <a href="'.$url.'">'.$readmore.'</a>';
   }
   return $excerpt;
}

$src = <<<EOF
   <b>My cool story</b>
   <p>Here it is. It's really cool. I like it. I like lots of stuff.</p>
   <p>I also like to read and write and carry on forever</p>
EOF;

echo first_n_words($src, 10);

echo "\n\n-----------------------------\n\n";

echo truncate_to_n_words($src, 10, 'http://www.google.com');

EDIT: Added functional example and accounted for punctuation and numbers in text




回答2:


I have a function though other people may say it's not good because I'm still good at PHP too (tips welcome people) but this will give you what you are looking for, it may need better coding if anyone has suggestions.

function Short($text, $length, $url, $more){
$short = mb_substr($text, 0, $length);

if($short != $text) {
    $lastspace = strrpos($short, ' ');
    $short = substr($short , 0, $lastspace);

    if(!$more){
        $more = "Read Full Post";
    } // end if more is blank

    $short .= "...[<a href='$url'>$more</a>]";
} // end if content != short

$short = str_replace("’","'", $short);
$short = stripslashes($short);
$short = nl2br($short);

} // end short function

To Use:

say your article content is the variable $content

function($content, "35", "http://domain.com/article_post", "Read Full Story");
echo $short;

Similarly, you can adjust the function to remove $url and $more from it and just have the excerpt with ... at the end.



来源:https://stackoverflow.com/questions/8990007/display-post-excerpts-limited-by-word-count

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!