prefix . 'accessiq_sessions'; // Top pages (use time_spent; schema has no duration). // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $accessiq_top_pages = $wpdb->get_results( $wpdb->prepare( 'SELECT t.page_url, COUNT(*) AS sessions, AVG(t.time_spent) AS avg_duration, SUM(CASE WHEN t.is_bounce = 1 THEN 1 ELSE 0 END) AS bounces, (SELECT s2.device_type FROM `' . esc_sql( $accessiq_sessions_tbl ) . '` s2 WHERE s2.page_url = t.page_url AND s2.created_at >= DATE_SUB(NOW(), INTERVAL %d DAY) GROUP BY s2.device_type ORDER BY COUNT(*) DESC LIMIT 1) AS device_type FROM `' . esc_sql( $accessiq_sessions_tbl ) . '` t WHERE t.created_at >= DATE_SUB(NOW(), INTERVAL %d DAY) AND t.page_url IS NOT NULL AND TRIM(t.page_url) != \'\' GROUP BY t.page_url ORDER BY sessions DESC LIMIT 10', $accessiq_days, $accessiq_days ) ); // Stat cards: use same $accessiq_days (created_at; schema has no started_at). // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $accessiq_stat_total_sessions = (int) $wpdb->get_var( $wpdb->prepare( 'SELECT COUNT(*) FROM `' . esc_sql( $accessiq_sessions_tbl ) . '` WHERE created_at >= DATE_SUB(NOW(), INTERVAL %d DAY)', $accessiq_days ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $accessiq_stat_avg_time_raw = $wpdb->get_var( $wpdb->prepare( 'SELECT AVG(time_spent) FROM `' . esc_sql( $accessiq_sessions_tbl ) . '` WHERE created_at >= DATE_SUB(NOW(), INTERVAL %d DAY) AND time_spent < 3600', $accessiq_days ) ); $accessiq_stat_avg_time_secs = $accessiq_stat_avg_time_raw ? (int) round( (float) $accessiq_stat_avg_time_raw ) : 0; $accessiq_stat_avg_time = $accessiq_stat_avg_time_secs >= 60 ? ( floor( $accessiq_stat_avg_time_secs / 60 ) . 'm ' . ( $accessiq_stat_avg_time_secs % 60 ) . 's' ) : ( $accessiq_stat_avg_time_secs . 's' ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $accessiq_stat_bounces = (int) $wpdb->get_var( $wpdb->prepare( 'SELECT COUNT(*) FROM `' . esc_sql( $accessiq_sessions_tbl ) . '` WHERE created_at >= DATE_SUB(NOW(), INTERVAL %d DAY) AND is_bounce = 1', $accessiq_days ) ); $accessiq_stat_bounce_rate = $accessiq_stat_total_sessions > 0 ? round( ( $accessiq_stat_bounces / $accessiq_stat_total_sessions ) * 100 ) : 0; // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $accessiq_stat_top_device = $wpdb->get_var( $wpdb->prepare( 'SELECT device_type FROM `' . esc_sql( $accessiq_sessions_tbl ) . '` WHERE created_at >= DATE_SUB(NOW(), INTERVAL %d DAY) GROUP BY device_type ORDER BY COUNT(*) DESC LIMIT 1', $accessiq_days ) ); $accessiq_stat_top_device = $accessiq_stat_top_device ? $accessiq_stat_top_device : '—'; $accessiq_current_days = $accessiq_days; ?>
Understand how visitors interact with your site
Visitor activity over selected period
| PAGE | SESSIONS | AVG TIME | BOUNCE RATE | TOP DEVICE |
|---|---|---|---|---|
|
📊 No page data yet for this period. Visitors will appear here after browsing your site. |
||||
| sessions; ?> | % | |||