博客 / WordPress/ WordPress 获取本周、今日及24小时内发布的文章数量(代码实现)

WordPress 获取本周、今日及24小时内发布的文章数量(代码实现)

WordPress 获取本周、今日及24小时内发布的文章数量(代码实现)

在 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' ); ?>

重要说明与最佳实践

  1. 性能考虑:方法一(本周)使用了 WP_Query 并设置了 no_found_rowsfields' => 'ids',这对性能更友好。方法二和方法三直接查询数据库,在数据量巨大时可能更高效,但需注意SQL注入防护(已使用 prepare 语句)。
  2. 时区问题:在涉及“今日”和“24小时”的查询中,务必使用 current_time() 函数而非原生的 date()time(),以确保与 WordPress 后台设置的时区一致。
  3. 缓存:如果这些统计数字不需要实时更新,可以考虑使用 Transients API 进行缓存,以显著提升页面加载速度。
  4. 错误处理:在生产环境中,建议对函数返回值进行判断,例如使用 intval() 确保输出为整数。

以上代码均经过修正和优化,建议直接使用。根据你的具体需求,选择合适的方法并集成到你的主题或插件中。

发表评论

您的邮箱不会公开。必填项已用 * 标注。