refactor(classes): organize inc/classes into domain folders
Move ~94 root class shells and root *-traits into domain directories (core, auth, user, credits, content, payment/gateways, forum, shop, sms, ai, messages, extensions, widgets, settings, admin). Update bootstrap require paths, co-locate traits with owners, fix forum/user relative requires, drop duplicate shop controller requires, and wire home-modules load. Path-only; class names and init order unchanged.
This commit is contained in:
1 parent
2a8fe68048
commit
ce1c13b947
115 files changed
+171
-224
No files matched your search
@@ -0,0 +1,146 @@
|
||||
<?php
|
||||
/**
|
||||
* AKSRT 访问量统计系统
|
||||
*
|
||||
* 追踪每日访客数和浏览量,为网站统计小工具提供数据支持。
|
||||
*
|
||||
* @package AKSRT
|
||||
*/
|
||||
|
||||
defined('ABSPATH') || exit;
|
||||
|
||||
class AKSRT_Stats_Tracker {
|
||||
|
||||
private static $instance = null;
|
||||
|
||||
/**
|
||||
* 单例模式
|
||||
*/
|
||||
public static function get_instance(): self {
|
||||
if (null === self::$instance) {
|
||||
self::$instance = new self();
|
||||
}
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化:挂钩到 wp_head
|
||||
*/
|
||||
public static function init(): void {
|
||||
add_action('wp_head', [self::get_instance(), 'track_visit'], 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 追踪访问
|
||||
*/
|
||||
public function track_visit(): void {
|
||||
// 排除管理员、爬虫、AJAX请求
|
||||
if (is_admin() || wp_doing_ajax()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (is_user_logged_in() && current_user_can('manage_options')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$today = current_time('Y-m-d');
|
||||
$option_key = 'aksrt_daily_stats_' . $today;
|
||||
|
||||
// 检查是否已统计过该访客
|
||||
$visitor_cookie = 'aksrt_visitor_' . $today;
|
||||
$is_unique = empty($_COOKIE[$visitor_cookie]);
|
||||
|
||||
// 获取或初始化今日统计
|
||||
$stats = get_option($option_key, ['visitors' => 0, 'pageviews' => 0]);
|
||||
|
||||
if (!is_array($stats)) {
|
||||
$stats = ['visitors' => 0, 'pageviews' => 0];
|
||||
}
|
||||
|
||||
// 更新统计
|
||||
$stats['pageviews']++;
|
||||
if ($is_unique) {
|
||||
$stats['visitors']++;
|
||||
setcookie($visitor_cookie, '1', time() + DAY_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN);
|
||||
}
|
||||
|
||||
update_option($option_key, $stats, false);
|
||||
|
||||
// 每月1日清理旧数据
|
||||
if ((int) date('j') === 1 && (int) date('H') === 0 && (int) date('i') < 5) {
|
||||
$this->cleanup_old_stats();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理30天前的统计数据
|
||||
*/
|
||||
private function cleanup_old_stats(): void {
|
||||
global $wpdb;
|
||||
|
||||
$threshold = date('Y-m-d', strtotime('-30 days'));
|
||||
$wpdb->query($wpdb->prepare(
|
||||
"DELETE FROM {$wpdb->options} WHERE option_name LIKE %s AND option_name < %s",
|
||||
$wpdb->esc_like('aksrt_daily_stats_') . '%',
|
||||
'aksrt_daily_stats_' . $threshold
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取今日统计
|
||||
*/
|
||||
public static function get_today_stats(): array {
|
||||
$today = current_time('Y-m-d');
|
||||
$stats = get_option('aksrt_daily_stats_' . $today, ['visitors' => 0, 'pageviews' => 0]);
|
||||
|
||||
if (!is_array($stats)) {
|
||||
return ['visitors' => 0, 'pageviews' => 0];
|
||||
}
|
||||
|
||||
return [
|
||||
'visitors' => absint($stats['visitors'] ?? 0),
|
||||
'pageviews' => absint($stats['pageviews'] ?? 0),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定日期统计
|
||||
*/
|
||||
public static function get_daily_stats(string $date): array {
|
||||
$stats = get_option('aksrt_daily_stats_' . $date, ['visitors' => 0, 'pageviews' => 0]);
|
||||
|
||||
if (!is_array($stats)) {
|
||||
return ['visitors' => 0, 'pageviews' => 0];
|
||||
}
|
||||
|
||||
return [
|
||||
'visitors' => absint($stats['visitors'] ?? 0),
|
||||
'pageviews' => absint($stats['pageviews'] ?? 0),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最近N天统计
|
||||
*/
|
||||
public static function get_period_stats(int $days = 30): array {
|
||||
$total = ['visitors' => 0, 'pageviews' => 0];
|
||||
for ($i = 0; $i < $days; $i++) {
|
||||
$date = date('Y-m-d', strtotime("-{$i} days"));
|
||||
$stats = self::get_daily_stats($date);
|
||||
$total['visitors'] += $stats['visitors'];
|
||||
$total['pageviews'] += $stats['pageviews'];
|
||||
}
|
||||
return $total;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取总浏览量(所有文章)
|
||||
*/
|
||||
public static function get_total_views(): int {
|
||||
global $wpdb;
|
||||
$total = $wpdb->get_var(
|
||||
"SELECT SUM(CAST(meta_value AS UNSIGNED)) FROM {$wpdb->postmeta} WHERE meta_key = 'aksrt_post_views'"
|
||||
);
|
||||
return max(0, (int) $total);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user