# 🚀 Automatyczne generowanie stron - Instrukcja

## Co to jest?

Od wersji **v1.2.0** wtyczka **automatycznie tworzy strony WordPress** dla każdego:
- 👤 **Zawodnika** dodanego do bazy
- 📅 **Sezonu** dodanego do bazy

**Nie musisz już ręcznie tworzyć stron i wklejać shortcodes!**

---

## 🎯 Jak to działa?

### Automatycznie po dodaniu

#### Gdy dodajesz zawodnika w panelu admin:
1. Wypełniasz formularz zawodnika (imię, nazwisko, pozycja, etc.)
2. Klikasz "Dodaj zawodnika"
3. **Wtyczka automatycznie:**
   - Zapisuje zawodnika do bazy
   - Tworzy stronę WordPress typu `sonics_player`
   - Generuje URL: `/zawodnicy/gary-payton/`
   - Wstawia shortcode: `[sonics_player_profile player_id="X"]`
   - Publikuje stronę

#### Gdy dodajesz sezon:
1. Dodajesz sezon (np. "2005-06")
2. **Wtyczka automatycznie:**
   - Tworzy stronę typu `sonics_season`
   - Generuje URL: `/sezony/2005-06-seattle-supersonics/`
   - Wstawia shortcodes: kadra, roster, mecze
   - Publikuje stronę

---

## 📋 Custom Post Types (CPT)

Wtyczka używa 2 nowych Custom Post Types:

### 1. `sonics_player` - Strony zawodników
- **URL Pattern**: `/zawodnicy/[nazwisko-imie]/`
- **Przykład**: `/zawodnicy/gary-payton/`
- **Treść**: Automatyczny shortcode profilu zawodnika
- **Meta**: Zapisuje `_sonics_player_id` i `_sonics_br_id`

### 2. `sonics_season` - Strony sezonów
- **URL Pattern**: `/sezony/[rok-zespol]/`
- **Przykład**: `/sezony/2005-06-seattle-supersonics/`
- **Treść**: Kadra, roster, mecze (3 shortcodes)
- **Meta**: Zapisuje `_sonics_season_id`

---

## 🔄 Synchronizacja masowa

Jeśli masz już dane w bazie (np. zaimportowane przed aktualizacją), możesz wygenerować strony dla wszystkich naraz.

### Metoda 1: Dashboard Admin (najłatwiejsza)

1. Przejdź do: **Sonics → Dashboard**
2. Znajdź kartę: **"Automatyczne strony"**
3. Kliknij przycisk: **"Generuj strony"**
4. Poczekaj na komunikat (np. "Utworzono 15 stron zawodników i 3 strony sezonów")

### Metoda 2: WP-CLI

```bash
# Synchronizuj zawodników
wp eval 'Sonics_CPT()->sync_all_players();'

# Synchronizuj sezony
wp eval 'Sonics_CPT()->sync_all_seasons();'

# Lub użyj AJAX endpoint (wymaga zalogowania)
```

### Metoda 3: Programowo (w kodzie PHP)

```php
$cpt = new Sonics_CPT();

// Synchronizuj wszystkich zawodników
$players_count = $cpt->sync_all_players();
echo "Utworzono $players_count stron zawodników";

// Synchronizuj wszystkie sezony
$seasons_count = $cpt->sync_all_seasons();
echo "Utworzono $seasons_count stron sezonów";
```

---

## 🔗 Linki automatyczne

### W shortcode `[sonics_players]`

Przycisk **"Profil"** w tabeli zawodników automatycznie linkuje do wygenerowanej strony:

**Przed:**
```
/aktualna-strona/?player=1&season=2
```

**Teraz:**
```
/zawodnicy/gary-payton/
```

---

## 📂 Struktura URL

### Zawodnicy
- Lista: `/zawodnicy/`
- Pojedynczy: `/zawodnicy/gary-payton/`
- Generowany slug: `sanitize_title($player_name)`

### Sezony
- Lista: `/sezony/`
- Pojedynczy: `/sezony/2005-06-seattle-supersonics/`
- Generowany slug: `sanitize_title($season_year . '-' . $team_name)`

---

## ⚙️ API dla developerów

### Tworzenie strony zawodnika

```php
$cpt = new Sonics_CPT();

$post_id = $cpt->create_player_page(
    1,                    // player_id z bazy
    'Gary Payton',        // Nazwa zawodnika
    'paytoga01'          // Basketball Reference ID (opcjonalnie)
);

// Zwraca: ID posta WordPress lub false
```

### Tworzenie strony sezonu

```php
$cpt = new Sonics_CPT();

$post_id = $cpt->create_season_page(
    1,                        // season_id z bazy
    '2005-06',                // Rok sezonu
    'Seattle SuperSonics'     // Nazwa zespołu
);
```

### Pobieranie URL strony zawodnika

```php
$cpt = new Sonics_CPT();

$url = $cpt->get_player_page_url( 1 ); // player_id
// Zwraca: https://example.com/zawodnicy/gary-payton/
```

### Pobieranie URL strony sezonu

```php
$cpt = new Sonics_CPT();

$url = $cpt->get_season_page_url( 1 ); // season_id
// Zwraca: https://example.com/sezony/2005-06-seattle-supersonics/
```

### Usuwanie strony

```php
$cpt = new Sonics_CPT();

// Usuń stronę zawodnika
$cpt->delete_player_page( 1 ); // player_id

// Usuń stronę sezonu
$cpt->delete_season_page( 1 ); // season_id
```

---

## 🎨 Customizacja szablonów

### Jeśli chcesz zmienić wygląd strony zawodnika:

**Opcja 1: Theme template**
Stwórz w swoim motywie plik:
```
twoj-motyw/single-sonics_player.php
```

**Opcja 2: Edytuj treść CPT**
Strony są w WordPress admin → Wszystkie wpisy. Możesz edytować treść ręcznie.

**Opcja 3: Filtr content**
```php
add_filter( 'the_content', function( $content ) {
    if ( is_singular( 'sonics_player' ) ) {
        // Twoja customizacja
        $content = '<div class="custom-player">' . $content . '</div>';
    }
    return $content;
}, 20 );
```

---

## 🛠️ Troubleshooting

### Problem: "Brak strony" w kolumnie "Akcje"

**Rozwiązanie:**
1. Przejdź do Dashboard → Automatyczne strony
2. Kliknij "Generuj strony"
3. Odśwież stronę z tabelą zawodników

### Problem: Strona 404 po kliknięciu linku

**Rozwiązanie:**
1. Przejdź do: **Ustawienia → Permalinki**
2. Kliknij **"Zapisz zmiany"** (bez zmiany ustawień)
3. To odświeża reguły przepisywania URL (flush rewrite rules)

### Problem: Strona istnieje ale nie wyświetla profilu

**Rozwiązanie:**
Sprawdź czy shortcode jest w treści CPT:
```sql
SELECT post_content FROM wp_posts 
WHERE post_type = 'sonics_player' 
AND ID = [ID_strony];
```

Jeśli brak, dodaj ręcznie lub usuń stronę i zregeneruj.

### Problem: Duplikaty stron

**Rozwiązanie:**
Funkcja `create_player_page()` sprawdza czy strona istnieje (po slug), więc nie powinna tworzyć duplikatów. Jeśli masz duplikaty:
```php
// Usuń wszystkie strony zawodników
$args = array( 'post_type' => 'sonics_player', 'posts_per_page' => -1 );
$posts = get_posts( $args );
foreach ( $posts as $post ) {
    wp_delete_post( $post->ID, true );
}

// Zregeneruj
$cpt->sync_all_players();
```

---

## 📊 Co zawiera automatyczna strona?

### Strona zawodnika
```
URL: /zawodnicy/gary-payton/

Treść:
[sonics_player_profile player_id="1"]

Meta:
_sonics_player_id: 1
_sonics_br_id: paytoga01
```

### Strona sezonu
```
URL: /sezony/2005-06-seattle-supersonics/

Treść:
## Kadra szkoleniowa
[sonics_coaching season_id="1"]

## Roster
[sonics_players season_id="1"]

## Mecze sezonu
[sonics_games season_id="1" limit="82"]

Meta:
_sonics_season_id: 1
```

---

## 🔐 Uprawnienia

- Tworzenie stron wymaga: `manage_options` (Administrator)
- CPT są publiczne: widoczne dla wszystkich użytkowników
- Edycja CPT: ukryte z menu admin (zarządzaj przez panel wtyczki)

---

## 🚦 Workflow użycia

### Scenariusz 1: Nowy zawodnik
```
1. Admin → Sonics → Zawodnicy
2. Wypełnij formularz
3. Kliknij "Dodaj zawodnika"
4. ✓ Strona automatycznie utworzona
5. Użytkownicy mogą odwiedzić: /zawodnicy/nowy-zawodnik/
```

### Scenariusz 2: Import CSV
```
1. Admin → Sonics → Import
2. Wgraj CSV z zawodnikami
3. Import wykonuje się
4. Po zakończeniu: kliknij "Generuj strony" w Dashboard
5. ✓ Wszystkie strony utworzone
```

### Scenariusz 3: Aktualizacja z v1.1 do v1.2
```
1. Zaktualizuj wtyczkę
2. Przejdź do Dashboard
3. Kliknij "Generuj strony"
4. ✓ Istniejące dane mają teraz swoje strony
```

---

## 📝 Changelog

### v1.2.0
- ✅ Dodano Custom Post Types: `sonics_player`, `sonics_season`
- ✅ Automatyczne tworzenie stron po dodaniu zawodnika/sezonu
- ✅ Przycisk synchronizacji w Dashboard
- ✅ Linki w `[sonics_players]` prowadzą do wygenerowanych stron
- ✅ API do zarządzania stronami programowo

---

## 🎯 Korzyści

✅ **Brak ręcznej pracy** - strony tworzą się automatycznie  
✅ **SEO-friendly URLs** - `/zawodnicy/gary-payton/` zamiast `?player=1`  
✅ **Łatwa edycja** - strony są w WordPress admin  
✅ **Permalink control** - pełna kontrola nad URL  
✅ **Integracja z motywem** - możesz użyć custom templates  
✅ **Bulk operations** - synchronizuj wszystkie naraz  

---

**Gotowe! Teraz Twoja wtyczka automatycznie tworzy profesjonalne strony dla zawodników i sezonów! 🎉**
