AI摘要:正在生成中……
# 起因与规划
在某某QQ交流群内,大家热烈讨论如何在Typecho主题中展示站点的相关运行信息,包括文章总数、文字总数、运行时间和总访客等信息。特别是对于如何实现总文章信息的统计,大家表现出了浓厚的兴趣。基于此,我简单思考了一下实现的逻辑:
- 遍历文章/页面统计总字数
- 存入WP自定义字段而不是直接操作数据库
- 每次文章/页面更新时更新数据
- 使用wp-json接口输出统计数据
# 实现
# 后端统计代码
以Sakura主题为例,在主题函数functions.php
下加入以下代码
/* 总字数统计 */
/* 统计函数 */
function get_total_word_count_and_post_count() {
$post_types = array('post', 'page'); // 统计文章和页面
$total_word_count = 0;
$total_post_count = 0;
foreach ($post_types as $post_type) {
$args = array(
'post_type' => $post_type,
'post_status' => 'publish',
'posts_per_page' => -1 // 获取所有发布的文章和页面
);
$all_posts = new WP_Query($args); // 查询所有文章和页面
if ($all_posts->have_posts()) {
while ($all_posts->have_posts()) {
$all_posts->the_post();
$content = get_post_field('post_content', get_the_ID()); // 获取文章内容
$content = strip_shortcodes($content); // 去除短代码
$content = wp_strip_all_tags($content); // 去除HTML标签
$word_count = mb_strlen($content, 'UTF-8'); // 使用mb_strlen统计字符数
$total_word_count += $word_count; // 累加总字数
$total_post_count++; // 统计文章和页面数
}
}
wp_reset_postdata(); // 重置查询数据
}
return array(
'total_word_count' => $total_word_count, // 返回总字数
'total_post_count' => $total_post_count // 返回总文章和页面数
);
}
/* 自定义字段存储 */
function update_total_word_count_and_post_count() {
$counts = get_total_word_count_and_post_count(); // 获取总字数和总文章数
update_option('total_word_count', $counts['total_word_count']); // 更新总字数到数据库
update_option('total_post_count', $counts['total_post_count']); // 更新总文章数到数据库
}
/* 自动更新统计数据 */
function update_word_count_on_save($post_id) {
// 检查是否为自动保存,避免重复执行
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
// 检查用户权限
if (!current_user_can('edit_post', $post_id)) {
return;
}
// 更新总字数和总文章页面数
update_total_word_count_and_post_count();
}
add_action('save_post', 'update_word_count_on_save'); // 在保存文章时触发更新
/* 返回字数和文章页面数 */
function get_stored_word_count_and_post_count() {
$total_word_count = get_option('total_word_count', 0); // 从数据库获取总字数
$total_post_count = get_option('total_post_count', 0); // 从数据库获取总文章数
return wp_send_json(array(
'total-word-count' => $total_word_count, // 返回总字数
'total-post-count' => $total_post_count // 返回总文章数
));
}
function register_word_count_route() {
register_rest_route('siteinfo/v1', '/wordcount', array(
'methods' => 'GET',
'callback' => 'get_stored_word_count_and_post_count', // 注册REST API路由
));
}
add_action('rest_api_init', 'register_word_count_route'); // 在REST API初始化时注册路由
如果您的站点有缓存(例如opcahce模块或其他WP缓存插件),请重启PHP并清除所有WP缓存使代码生效,接下来,访问/wp-json/siteinfo/v1/wordcount
即可获取包含统计信息的。
当然,通过修改代码,也可以输出类似“38.1k 字”这样的形势,以下是一部分代码示例,请只选择一个使用:
/* 返回字数和文章页面数-格式化为缩写 */
function get_stored_word_count_and_post_count() {
$total_word_count = get_option('total_word_count', 0);
$total_post_count = get_option('total_post_count', 0);
// 格式化总字数
if ($total_word_count >= 1000) {
$total_word_count = round($total_word_count / 1000, 1) . 'k';
}
return wp_send_json(array(
'total-word-count' => $total_word_count,
'total-post-count' => $total_post_count
));
}
/* 返回字数和文章页面数-格式化总字数为英式格式 */
function get_stored_word_count_and_post_count() {
$total_word_count = get_option('total_word_count', 0);
$total_post_count = get_option('total_post_count', 0);
$total_word_count = number_format($total_word_count);
return wp_send_json(array(
'total-word-count' => $total_word_count,
'total-post-count' => $total_post_count
));
}
# 前端输出统计信息
以下是一个简单示例:
<script>fetch('/wp-json/siteinfo/v1/wordcount').then(response=>response.json()).then(data=>{document.getElementById('word-count').innerText=data["total-word-count"];document.getElementById('post-count').innerText=data["total-post-count"];});</script>
<p>目前已经写了<span id="word-count"></span>字,总计<span id="post-count"></span>篇文章。</p>
目前已经写了字,总计篇文章。
这样即可简单展示全站文章码字数与文章数。
版权声明:转载时请以超链接形式标明文章原始出处和作者信息,来源孤影墨香本文链接: https://www.iloli.xin/4359.html
访问时间:2025-01-20 01:45:39
Comments | 1 条评论
博主 Hikurn_Xi
冒泡