统计标题和帖子字符数

时间:2014-09-17 作者:user3088202

我需要获得文章标题和文章文本字符的总字符数。是否有任何内置WordPress功能可用于此?我的帖子是分页的,所以帖子文本计数的数字必须来自DB?

使用这些数字,我想构建一个功能,为我的Google Tag Manager数据层提供如下内容:

if($postCaharacters < 1000) {
    echo "GTM_POST_CHARACTERS:\'Under 1000\'";
}
等等。

UPDATE - FINAL WORKING CODE

function countWords() {
    global $post;
    $content = $post->post_content;
    $decode_content = html_entity_decode($content);
    $strip_shortcode = strip_shortcodes($decode_content);
    $strip_wp_tags = wp_strip_all_tags($strip_shortcode, true);
    $countwords = str_word_count($strip_wp_tags);
    $number = $countwords;
    if ($number > 3000 || $number == 3000) {
        return \'3k+\';
    } elseif ($number > 2500 || $number == 2500) {
        return \'2.5k-3k\';
    } elseif ($number > 2000 || $number == 2000) {
        return \'2k-2.5k\';
    } elseif ($number > 1500 || $number == 1500) {
        return \'1.5k-2k\';
    } elseif ($number > 1100 || $number == 1100) {
        return \'1.1k-1.5k\';
    } elseif ($number > 800 || $number == 800) {
        return \'800-1.1k\';
    } elseif ($number > 500 || $number == 500) {
        return \'500-800\';
    } elseif ($number > 200 || $number == 200) {
        return \'200-500\';
    } else {
        return \'<200\';
    }
}

2 个回复
最合适的回答,由SO网友:Tomás Cot 整理而成

您可以使用此功能wp_strip_all_tags.

strlen( wp_strip_all_tags($post->post_content));
这样就可以去掉所有HTML标记。

只需要一点额外的细节,您可能还需要去除短代码。您可以使用此功能strip_shortcodes

你最终会得到这样的结果:

 strlen( wp_strip_all_tags(strip_shortcodes($post->post_content)));
要将编码的实体转换为相应的字符串值,可以使用PHP函数html_entity_decode.

实例

" " &lt;/S&lt;&gt;;
is converted to
" " </S<>;
测试:

//CODE
    var_dump($post->post_content);
    var_dump(wp_strip_all_tags($post->post_content, true));
    var_dump(html_entity_decode(wp_strip_all_tags($post->post_content, true)));
    var_dump(html_entity_decode(strip_shortcodes(wp_strip_all_tags($post->post_content, true))));

 //RESULTS

string \'áé´r´díó\' ñ   " " &lt;/S&lt;&gt;;   a

[gallery]\' (length=59)

string \'áé´r´díó\' ñ   " " &lt;/S&lt;&gt;;   a [gallery]\' (length=56)

string \'áé´r´díó\' ñ   " " </S<>;   a [gallery]\' (length=47)

string \'áé´r´díó\' ñ   " " </S<>;   a \' (length=38)



//CODE
var_dump(strlen(html_entity_decode(strip_shortcodes(wp_strip_all_tags($post->post_content, true)))));

var_dump(strlen(html_entity_decode(wp_strip_all_tags($post->post_content, true))));

var_dump(strlen(wp_strip_all_tags($post->post_content, true)));

 //RESULTS

int 38
int 47
int 56
当我使用var_dump 每个字符串都有其长度,但我将调用结果添加到strlen 不管怎样,都要发挥作用。

SO网友:Mark Kaplun

你的假设是对的$post->post_content 包含标记和其他非文本实体,如短代码。您可以使用strip_tags 要除去标记,您可能需要首先扩展短代码。导致类似

$count = strlen(strip_tags(do_shortcode($post->post_content));
根据是否需要计算空格quotese等,它仍然会给出错误的结果。

结束