在 WordPress 开发中,有时需要统计特定时间段内发布的文章数量,例如用于展示网站活跃度或生成统计报告。本文将提供几种可靠的方法,分别用于获取本周、今日以及最近24小时内发布的文章数量。
方法一:获取本周发布的文章数量
此方法使用 WP_Query 并配合 date_query 参数来查询过去一周内发布的文章。这是一种高效且符合 WordPress 标准实践的方式。
/**
* 获取本周发布的文章数量
*
* @return int 文章数量
*/
function get_week_post_count() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'after' => '1 week ago'
)
),
'no_found_rows' => true, // 提升性能,不计算分页
'fields' => 'ids', // 只获取文章ID,减少内存占用
'posts_per_page' => -1,
);
$query = new WP_Query( $args );
return $query->post_count;
}
使用方法
将上述代码添加到当前主题的 functions.php 文件中。在需要显示数量的模板位置(如侧边栏、页脚)调用此函数:
<?php echo get_week_post_count(); ?>
方法二:获取今日发布的文章数量
此方法直接使用 $wpdb 进行数据库查询,通过比较日期来精确获取今天发布的文章。请注意,此方法依赖于服务器的时区设置。
/**
* 获取今日发布的文章数量
*
* @param string $post_type 文章类型,默认为 'post'
* @return int 文章数量
*/
function get_posts_count_from_today( $post_type = 'post' ) {
global $wpdb;
$today = current_time( 'Y-m-d' ); // 使用WordPress时区设置
$numposts = $wpdb->get_var(
$wpdb->prepare(
"SELECT COUNT(ID) FROM {$wpdb->posts} WHERE post_status = 'publish' AND post_type = %s AND DATE(post_date) = %s",
$post_type,
$today
)
);
return (int) $numposts;
}
使用方法
将上述代码添加到 functions.php 文件中。调用方式如下:
<?php echo get_posts_count_from_today(); ?>
若要查询其他文章类型(例如自定义类型 product),可以传递参数:
<?php echo get_posts_count_from_today( 'product' ); ?>
方法三:获取最近24小时内发布的文章数量
此方法同样使用 $wpdb,查询从当前时间算起,过去24小时内发布的文章。
/**
* 获取最近24小时内发布的文章数量
*
* @param string $post_type 文章类型,默认为 'post'
* @return int 文章数量
*/
function get_posts_count_from_last_24h( $post_type = 'post' ) {
global $wpdb;
$time_24h_ago = current_time( 'mysql' ); // 获取当前时间
// 计算24小时前的时间
$time_24h_ago = date( 'Y-m-d H:i:s', strtotime( $time_24h_ago . ' -24 hours' ) );
$numposts = $wpdb->get_var(
$wpdb->prepare(
"SELECT COUNT(ID) FROM {$wpdb->posts} WHERE post_status = 'publish' AND post_type = %s AND post_date > %s",
$post_type,
$time_24h_ago
)
);
return (int) $numposts;
}
使用方法
将上述代码添加到 functions.php 文件中。调用方式如下:
<?php echo get_posts_count_from_last_24h(); ?>
若要查询其他文章类型:
<?php echo get_posts_count_from_last_24h( 'product' ); ?>
重要说明与最佳实践
- 性能考虑:方法一(本周)使用了
WP_Query并设置了no_found_rows和fields' => 'ids',这对性能更友好。方法二和方法三直接查询数据库,在数据量巨大时可能更高效,但需注意SQL注入防护(已使用prepare语句)。 - 时区问题:在涉及“今日”和“24小时”的查询中,务必使用
current_time()函数而非原生的date()或time(),以确保与 WordPress 后台设置的时区一致。 - 缓存:如果这些统计数字不需要实时更新,可以考虑使用 Transients API 进行缓存,以显著提升页面加载速度。
- 错误处理:在生产环境中,建议对函数返回值进行判断,例如使用
intval()确保输出为整数。
以上代码均经过修正和优化,建议直接使用。根据你的具体需求,选择合适的方法并集成到你的主题或插件中。