为文章页面添加字数统计显示

我希望在本站文章中添加显示字数统计的功能。在不会撰写代码的条件下,我利用ChatGPT实现了这一功能。但在解决这一任务的过程中,我也遇到了一些问题。此文将记录我解决这个问题的全部过程,并提供一些撰写提示词的思路。

起初,我希望在文章的标题和正文之间插入字数统计。通过与ChatGPT的初步交流,我认为可以通过修改single.php这一配置文件来实现此功能。我了解到自定义配置文件应在子主题下完成,否则任何改变将在更新主题后被覆盖。由此,我安装了Child Theme Configurator插件,并为我使用的Astra主题创建了子主题,在创建过程中全部使用默认设置。

我通过Child Theme Configurator插件复制了single.php配置文件到子主题中,并初次尝试通过ChatGPT编写代码。我试图根据提示将ChatGPT编辑的代码插入single.php的相应位置中,并进行了预览。但无论如何调整,字数统计文本都没有在我期望的区域显示。我发现,当我将代码移动到<?php astra_content_loop(); ?>之上时,字数统计文本会显示在标题的上方;而移动到此代码下方时,字数统计文本会显示在“后一篇文章”按钮的下方。这意味着,这行代码处理了从标题到最后的按钮在内的完整内容,而我无法通过简单编辑single.php文件将代码插入这个完整内容之中。

我试图寻找这行代码的源头进行修改,可以发现,这行代码涉及一个Astra主题特有的函数。我在这件事上消耗了很多时间,尽管我在搜索引擎中找到了相应信息,但我认为这可能是个化简为繁的工作,并可能违背一些既有设计的初衷,便放弃了这个选择。

通过与ChatGPT的继续沟通,我了解到也可以通过修改functions.php这一配置来实现此功能。根据ChatGPT所述,其大致的逻辑是我可以在functions.php中定义函数并进行挂钩。在此过程中,我发现ChatGPT对WordPress软件甚至Astra主题都有所了解,因为它可以正确使用预设的各种函数和钩子。经过对提示词的润色,我成功将字数统计文本显示在了我期望的区域。我发现字数统计的结果总是为0,经过与ChatGPT的交流,我了解到这是由于str_word_count()函数不能处理中文字符。当字数正常显示后,我发现字数统计的数字与实际情况有误,且总是多于实际情况,经过与ChatGPT的交流,我认识到这是因为制表符等不可见字符被包含在内。最终我借助ChatGPT重新编写代码,解决了所有问题。以下给出最终的提示词和代码供参考。

提示词:我希望在Wordpress中,在Astra主题下,通过自定义function.php文件,在文章页面的标题和正文中间插入一行字数统计,统计所有可见字符,去除制表符等不可见字符,且支持统计中文。请帮我编写一段代码。

输出代码如下:

function add_word_count( $content ) {
    if ( is_single() ) {
        // 获取文章内容并移除所有HTML标签
        $post_content = strip_tags( get_the_content() );
        
        // 使用正则表达式过滤掉不可见字符(如换行符、制表符等)
        $visible_content = preg_replace('/[\p{Z}\p{C}]+/u', '', $post_content);
        
        // 统计可见字符数
        $word_count = mb_strlen( $visible_content, 'UTF-8' );
        
        // 生成字数统计文本
        $word_count_text = ' 本文共计 ' . $word_count . ' 字';
        
        // 将字数统计文本插入到文章内容的前面
        $content = '<p>' . $word_count_text . '</p>' . $content;
    }
    return $content;
}
add_filter( 'the_content', 'add_word_count' );

但在此之后,我又希望能将字数统计展示到侧边栏处,而不是文章中间。我发现,侧边栏由小工具组成,而小工具中预设了一个“自定义HTML”功能,我猜测这一预设可以帮助我实现目标功能。由此,我向ChatGPT重新提出了问题,并很快地解决了这一任务。与此同时,我希望这一小工具在文章页面显示字数统计,而在其它页面显示一行欢迎语,ChatGPT也完美解决了这一任务。以下给出最终的提示词和代码供参考。

提示词:我希望在Wordpress中,在Astra主题下,通过“自定义HTML”这个预设的小工具,设计一个字数统计功能。我会将这个小工具插入侧边栏,而侧边栏会在文章页面、分类页面等多处出现。在文章页面中,该小工具能显示当前文章的字数统计,统计包含所有可见字符,去除制表符等不可见字符,且支持统计中文;在其它页面中,该小工具不会显示字数统计,而会显示一行固定的欢迎语。请帮我编写一段代码。注意,这些代码应该出现在“自定义HTML”的文本框里。

输出代码如下(欢迎语已更换):

<div id="word-count">欢迎来到Rabbit House(・∀・)!!</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 检查当前页面是否是单个文章页面
    if (document.body.classList.contains('single-post')) {
        // 获取当前文章的内容
        var postContent = document.querySelector('.entry-content').innerText;

        // 去除空格和制表符
        postContent = postContent.replace(/[\s\t\r\n]+/g, '');

        // 计算字数
        var wordCount = postContent.length;

        // 更新字数统计显示
        document.getElementById('word-count').innerText = '当前文章字数:' + wordCount + ' 字';
    }
});
</script>

最终,这一任务得到了完美解决,此功能目前也实装于本网站。总而言之,在使用ChatGPT的过程中,撰写合适详尽的提示词是尤为重要的。与此同时,除了PHP和HTML这样通用语言,ChatGPT甚至能对WordPress软件和Astra主题这种规模的环境给出特定的解决方案,可见ChatGPT的知识库十分庞大,我们也可以在具体知识方面对ChatGPT给予更多信任。

注:请不要同时使用上述两段代码。个人发现,后一种方案会将前一种方案生成的“本文共计n字”这一段字符也包含在统计之内。不难理解,这是$content = '<p>' . $word_count_text . '</p>' . $content;这段代码所致。解决这一问题大概并不困难,但上方给出的代码没有考虑这一问题,请注意这一点。

滚动至顶部