滤器\'the_content\'
, count the words, 并添加所需的标记。您不应该使用str_word_count()
因为它有数字和utf-8的问题。
让我们从一个单词计数函数开始:
/**
* Alternative for str_word_count().
*
* @link http://toscho.de/2012/php-woerter-zaehlen/
* @param string $str
* @return int Number of words
*/
function t5_word_count( $str )
{
// We do not want to count markup
$text = strip_tags( $str );
// no leading and trailing white space
$text = trim( $text );
// take multiple white spaces as one
// Add one space to get an almost exact match
$word_count = preg_match_all( \'~\\s+~\', "$text ", $m );
return (int) $word_count;
}
现在,过滤器功能:
// Hook in very late to let other filters (shortcodes and such)
// do their work first.
add_filter( \'the_content\', \'t5_content_word_count\', 999 );
/**
* Add a <div> with a special class to the content.
*
* @param string $content
* @return string
*/
function t5_content_word_count( $content )
{
$words = t5_word_count( $content );
$class = \'default\';
// max 100 words
$words < 101 && $class = \'100\';
// max 50 words
$words < 51 && $class = \'50\';
return "<div class=\'word-count-$class\'>$content</div>";
}
我选择了一个类,而不是在移动设备或打印页面上非常糟糕的内联样式。
现在,您可以在样式表中设置这些类的样式:
.word-count-default
{
font-size: 1em;
}
.word-count-100
{
font-size: 1.1em;
}
.word-count-50
{
font-size: 1.2em;
}
请注意,过滤器只能在文章的单个页面上工作。如果您已使用将帖子拆分为多个部分
<!--nextpage-->
你可能会在那篇文章的不同页面上得到不同的类。
更新以插入div
保存帖子时,不要过滤\'the_content\'
, 但是\'wp_insert_post_data\'
. 您需要第三个函数:
add_filter( \'wp_insert_post_data\', \'t5_count_words_on_insert\', 999 );
/**
* Add the font size div on post insert.
*
* @wp-hook wp_insert_post_data
* @param array $data
* @return array
*/
function t5_count_words_on_insert( $data )
{
\'\' !== $data[\'post_content\']
&& FALSE === strpos(
stripslashes( $data[\'post_content\'] ),
"<div class=\'word-count-"
)
&& $data[\'post_content\'] = t5_content_word_count( $data[\'post_content\'] );
return $data;
}
请参见
/wp-includes/post.php function wp_insert_post()
有关详细信息。
我不推荐这种解决方案。您不能使用<!--nextpage-->
现在再也没有了,因为你会以一个未关闭的<div>
在第一页上。