get_charset_collate(); $table_categories = $wpdb->prefix . 'mystat_categories'; $table_activities = $wpdb->prefix . 'mystat_activities'; // SQL dla Kategorii $sql_cat = "CREATE TABLE $table_categories ( id mediumint(9) NOT NULL AUTO_INCREMENT, name varchar(50) NOT NULL, icon varchar(50) NOT NULL, color varchar(20) NOT NULL, PRIMARY KEY (id) ) $charset_collate;"; // SQL dla Aktywności $sql_act = "CREATE TABLE $table_activities ( id bigint(20) NOT NULL AUTO_INCREMENT, category_id mediumint(9) NOT NULL, date date NOT NULL, distance decimal(10,2) DEFAULT 0.00, duration time DEFAULT '00:00:00', calories int(11) DEFAULT 0, comment text, PRIMARY KEY (id) ) $charset_collate;"; require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $sql_cat ); dbDelta( $sql_act ); // Dodanie domyślnych kategorii, jeśli tabela jest pusta if ( $wpdb->get_var( "SELECT COUNT(*) FROM $table_categories" ) == 0 ) { $wpdb->insert( $table_categories, array( 'name' => 'Rower', 'icon' => 'dashicons-buddicons-groups', 'color' => '#3498db' ) ); $wpdb->insert( $table_categories, array( 'name' => 'Bieganie', 'icon' => 'dashicons-businessman', 'color' => '#e74c3c' ) ); } } // --- 2. MENU ADMINA I DASHBOARD --- add_action( 'admin_menu', 'mystat_add_admin_menu' ); function mystat_add_admin_menu() { add_menu_page( 'Moje Statystyki', 'Statystyki', 'manage_options', 'moje-statystyki', 'mystat_dashboard_page', 'dashicons-chart-line', 6 ); } function mystat_dashboard_page() { echo '

Moje Statystyki Sportowe

'; mystat_render_history_table(); echo '
'; } function mystat_render_history_table() { global $wpdb; // Definicje nazw tabel (z uwzględnieniem prefixu WP, jeśli był użyty przy tworzeniu) // Zakładam, że tabele nazywają się dokładnie tak jak w dokumentacji, ale dobrą praktyką jest $wpdb->prefix // Jeśli tabele są "sztywne" (bez prefixu wp_), usuń $wpdb->prefix. $table_activities = $wpdb->prefix . 'mystat_activities'; $table_categories = $wpdb->prefix . 'mystat_categories'; // --- 1. OBSŁUGA USUWANIA (DELETE) --- if ( isset( $_GET['action'], $_GET['id'], $_GET['_wpnonce'] ) && $_GET['action'] === 'mystat_delete' ) { $activity_id = intval( $_GET['id'] ); // Weryfikacja bezpieczeństwa (Nonce) if ( wp_verify_nonce( $_GET['_wpnonce'], 'mystat_delete_' . $activity_id ) ) { $result = $wpdb->delete( $table_activities, array( 'id' => $activity_id ), array( '%d' ) ); if ( $result ) { echo '

Aktywność została usunięta.

'; } else { echo '

Wystąpił błąd podczas usuwania.

'; } } else { echo '

Błąd weryfikacji bezpieczeństwa (Nonce).

'; } } // --- 2. POBIERANIE DANYCH (SELECT) --- // Pobieramy ostatnie 10 wpisów, łącząc z tabelą kategorii, aby mieć nazwę i ikonę $sql = " SELECT a.*, c.name as category_name, c.icon, c.color FROM $table_activities a LEFT JOIN $table_categories c ON a.category_id = c.id ORDER BY a.date DESC, a.id DESC LIMIT 10 "; $activities = $wpdb->get_results( $sql ); // --- 3. WIDOK TABELI (HTML) --- ?>

Ostatnie Aktywności

$_REQUEST['page'], // Zachowaj obecną stronę admina 'action' => 'mystat_delete', 'id' => $row->id, '_wpnonce' => wp_create_nonce( 'mystat_delete_' . $row->id ) ), admin_url( 'admin.php' ) ); ?>
Ikona Data Kategoria Dystans (km) Czas Kcal Komentarz Akcja
icon ) ) : ?> date ); ?> category_name ); ?> distance, 2, ',', ' ' ); ?> duration ); ?> calories ); ?> comment, 5 ) ); ?> Usuń
Brak zarejestrowanych aktywności. Dodaj pierwszy trening powyżej!