class CTA_Dashboard { public function __construct() { add_action('admin_menu', [$this, 'menu']); } /* ===================================================== * MENU * ===================================================== */ public function menu() { add_menu_page( 'CTA Analytics', 'CTA Analytics', 'manage_options', 'cta-analytics', [$this, 'render_router'], 'dashicons-chart-line', 26 ); } /* ===================================================== * ROUTER (dashboard / detail) * ===================================================== */ public function render_router() { if (!empty($_GET['cta_key'])) { $this->render_detail(); } else { $this->render_dashboard(); } } /* ===================================================== * DASHBOARD * ===================================================== */ public function render_dashboard() { global $wpdb; $table = $wpdb->prefix . 'cta_stats'; $from = $_GET['from'] ?? date('Y-m-07'); $to = $_GET['to'] ?? date('Y-m-d'); $rows = $wpdb->get_results($wpdb->prepare(" SELECT cta_key, SUM(views) as views, SUM(clicks) as clicks, ROUND(SUM(clicks)/SUM(views)*100,2) as ctr FROM $table WHERE created_date BETWEEN %s AND %s GROUP BY cta_key HAVING views > 0 ORDER BY clicks DESC LIMIT 50 ", $from, $to)); echo '
'; echo '

📊 CTA Analytics

'; echo ''; echo ''; if ($rows) { foreach ($rows as $r) { $link = admin_url('admin.php?page=cta-analytics&cta_key=' . urlencode($r->cta_key)); echo ""; } } else { echo ''; } echo '
CTA Key Views Clicks CTR (%) URL
{$r->cta_key} {$r->views} {$r->clicks} {$r->ctr}% Xem link
Không có dữ liệu
'; echo '
'; } /* ===================================================== * DETAIL PAGE (LIST URL) * ===================================================== */ private function render_detail() { global $wpdb; $table = $wpdb->prefix . 'cta_stats'; $cta_key = sanitize_text_field($_GET['cta_key']); // ===== PAGINATION ===== $paged = max(1, intval($_GET['paged'] ?? 1)); $per_page = 20; $offset = ($paged - 1) * $per_page; // ===== TOTAL ===== $total = $wpdb->get_var($wpdb->prepare(" SELECT COUNT(DISTINCT post_url) FROM $table WHERE cta_key = %s ", $cta_key)); // ===== DATA ===== $rows = $wpdb->get_results($wpdb->prepare(" SELECT post_url, MAX(post_title) as post_title, SUM(views) as views, SUM(clicks) as clicks FROM $table WHERE cta_key = %s GROUP BY post_url ORDER BY clicks DESC LIMIT %d OFFSET %d ", $cta_key, $per_page, $offset)); echo '
'; echo "

🔗 Danh sách URL – {$cta_key}

"; echo '← Quay lại

'; echo ''; echo ''; if ($rows) { foreach ($rows as $r) { echo ""; } } else { echo ''; } echo '
Tiêu đề URL Views Clicks
{$r->post_title} {$r->post_url} {$r->views} {$r->clicks}
Không có dữ liệu
'; // ===== PAGINATION ===== $total_pages = ceil($total / $per_page); if ($total_pages > 1) { echo '
'; for ($i = 1; $i <= $total_pages; $i++) { $url = admin_url('admin.php?page=cta-analytics&cta_key=' . urlencode($cta_key) . '&paged=' . $i); $active = ($i == $paged) ? 'style="font-weight:bold;"' : ''; echo "{$i}"; } echo '
'; } echo '
'; } }