根据帖子中的字数自动设置字体大小

时间:2012-06-09 作者:BobGCA

提交发布的帖子将统计帖子中的字数,并根据字数添加预设字体大小的div。

如果帖子最多包含50个字,则返回的字号为:18px;

<div style="font-size:18px;"><p>Text with up to 50 words.</p></div> 
如果帖子包含50到100个单词,则返回字体大小:16px;

<div style="font-size:16px;"><p>Text with 50 to 100 words.</p></div>
跨度将在最后一个</p>.

<div style="font-size:16px;"><p>paragraph 1</p><p>paragraph 2</p><p>paragraph 3</p></div>
有人知道它有什么功能吗?非常感谢。

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

滤器\'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> 在第一页上。

SO网友:Kirill Fuchs

用于此的php函数是

str\\u word\\u count(字符串、返回、字符)

其中string=(必需)并指定要检查的字符串

return=(可选)。指定str\\u word\\u count()函数的返回值。可能的值:0-默认值。返回找到的单词数,1-返回一个包含字符串中单词的数组,2-返回一个数组,其中键是单词在字符串中的位置,值是实际单词

char=(可选)指定要视为单词的特殊字符。

结束

相关推荐

使用$_SESSION和PRE_GET_POSTS的自定义发布类型搜索

我整天都在黑客攻击一个自定义的帖子类型搜索/过滤系统。到目前为止,我有:function kdev_property_query($query) { if(isset($_POST[\'rooms_n\'])) $_SESSION[\'rooms_n\'] = $_POST[\'rooms_n\']; if(isset($_POST[\'univer\'])) $_SESSION[\'univer\'] = $_POST[\'univer\']; if(isset($_P