Files
WP-Ingame-Shop-Pro/README.md
2026-01-06 18:20:33 +00:00

208 lines
10 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# WP Ingame Shop Pro NO RCON & CUSTOM CURRENCY
Vollautomatischer, Minecraft-basierter Ingame-Shop für WordPress mit Warenkorb, Daily Deal, Kategorien, Gutscheinen und eigenem Währungssystem komplett ohne RCON, ideal für Bungee-/Proxy-Setups mit externer Ingame-Bestätigung.
## Features
- 🛒 **Warenkorb-System**: Spieler können mehrere Items gleichzeitig kaufen, alles wird als eine Bestellung in der Datenbank gespeichert.
- 💾 **Saubere Order-Struktur**: Eine Bestellung = eine Zeile in `wp_wis_orders` mit JSON-Detaildaten (Items + Gutschein).
- 📋 **Detail-Ansicht im Backend**: Übersicht wie „1x Diamant, 64x Stein“ inkl. Gutschein und Debug-JSON.
- 💰 **Eigene Währung**: Frei konfigurierbarer Währungsname (z.B. Coins, Tokens) statt Euro.
- 🖼️ **Auto-Itembilder**: Bilder werden automatisch aus einer Basis-URL + Item-ID (`minecraft:diamond``minecraft_diamond.png`) generiert.
- 🔥 **Angebote & Sales**: Items können als Angebot markiert und mit eigenem Angebots-Preis versehen werden.
- 🎁 **Daily Deal**: Automatisches „Angebot des Tages“ mit frei einstellbarem prozentualem Rabatt, gesteuert über Cron.
- 🎫 **Smart Coupons**: Gutscheine als Festbetrag oder Prozent, optional keine Wirkung auf Angebot-Items (Sale).
- 🏷️ **Kategorien**: Eigene Taxonomie `wis_category` mit Backend-Tabs/Filter im Shop-Frontend.
- 🏆 **Top Spender**: Statistikseite mit Summe aller abgeschlossenen/cancelled Orders pro Spieler.
- 🌐 **REST API**: Endpoints für Orders, Pending Orders, Ausführung, Abschluss, Storno, Gutscheinprüfung und Bulk-Import.
- 📥 **Bulk-Import**: JSON-Import von Items (z.B. von `minecraft-ids.com`) in Batches inkl. Fortschrittsanzeige.
- 🧹 **Bulk Delete**: Massenlöschung für Items, Server und Gutscheine mit Admin-Notice.
- 🎮 **Ingame-Integration ready**: Orders werden über REST abgeholt und serverseitig (z.B. Plugin/Bot) bestätigt, kein RCON notwendig.
## Installation
1. Plugin-Datei (`wp-ingame-shop-pro.php` o. ä.) in den Ordner `wp-content/plugins/wp-ingame-shop-pro` legen.
2. Im WordPress-Backend unter „Plugins“ das Plugin **aktivieren**.
3. Bei Aktivierung werden automatisch die Tabellen `wp_wis_orders` und `wp_wis_coupons` erstellt sowie Cron-Events für den Daily Deal registriert.
4. Cron muss auf dem Server funktionieren (WP-Cron oder System-Cron, der `wp-cron.php` triggert).
## Admin-Bereich
Nach der Aktivierung erscheint im Backend das Menü **„Ingame Shop“** mit mehreren Unterseiten.
### Menüs
- **Ingame Shop (Übersicht)**
- Globale Einstellungen, Feature-Übersicht, Bulk-Import.
- **Bestellungen**
- Liste aller Orders, Detailansicht, manuelles Löschen/Abschließen.
- **Top Spender**
- Rangliste nach ausgegebenen Coins (inkl. Anzahl Bestellungen).
- **Items** (CPT `wis_item`)
- Verwaltung der Shop-Items inkl. Preis, Serverzuordnung, Kategorie, Angebot, Daily Deal.
- **Kategorien** (`wis_category`)
- Hierarchische Kategorien für Items (werden im Frontend als Tabs angezeigt).
- **Servers** (CPT `wis_server`)
- Reine Serverdefinition (Name/Slug), dient zur Filterung und Zuordnung im Shop.
- **Gutscheine** (CPT `wis_coupon`)
- Verwaltung von Gutscheincodes inkl. Typ, Wert, Limit, Ablaufdatum.
### Globale Einstellungen
Zu finden unter **Ingame Shop → Ingame Shop (Übersicht)**.
- **Shop Header Text**
- Text im grünen Info-Balken im Frontend, leer = kein Balken.
- **Währungsname**
- Anzeigeeinheit für Preise, z.B. „Coins“.
- **Bilder Basis-URL**
- Basis-URL, an die `ITEM_ID.png` angehängt wird, z.B. `https://assets.minecraft-ids.com/1_21_10/`.
- **Gutscheine bei Angeboten ausschließen**
- Wenn aktiviert, wirken Gutscheine nur auf normale Items, nicht auf als Angebot markierte Items.
- **Daily Deal aktivieren + Rabatt (%)**
- Aktiviert den täglichen Cron, der ein zufälliges Item (mit Preis > 0, bisher kein Daily Deal) auswählt und rabattiert.
## Custom Post Types & Metaboxen
### Shop Items (`wis_item`)
Unter **Ingame Shop → Items**.
Metabox **„Item Einstellungen“**:
- **Status-Anzeige**
- Zeigt an, ob das Item aktiv im Shop ist (publish + Preis > 0) oder inaktiv.
- **Preis (Coins)**
- Integer > 0 macht das Item automatisch aktiv (Status publish), 0 schaltet auf Entwurf.
- **Item ID (z.B. `minecraft:diamond`)**
- Wird für die Bild-URL und das JSON-Payload (Ingame-Give) verwendet.
- **Kategorie(n)**
- Checkbox-Liste aller `wis_category`-Terms, beeinflusst die Tabs im Frontend.
- **Daily Deal (Angebot des Tages)**
- Option „manuell als Angebot des Tages setzen“, überschreibt die Automatik bis Mitternacht.
- **Angebot / Sale**
- Checkbox „Als Angebot markieren 🔥“ + optionaler Angebots-Preis.
- Angebots-Preis wird angezeigt, normaler Preis durchgestrichen.
- **Beschreibung**
- Langtext, der im Frontend unter dem Titel angezeigt wird.
- **Server zuweisen**
- Checkbox-Liste aller definierten `wis_server`, steuert Sichtbarkeit und Kaufbarkeit pro Server.
Zusätzlich existiert eine Auto-Status-Logik, die beim Speichern `publish/draft` abhängig vom Preis setzt.
### Server (`wis_server`)
Metabox „Server Einstellungen“ zeigt nur einen Hinweis, dass keine RCON-Daten notwendig sind.
- Der **Post-Slug** des Servers wird als Server-ID im Frontend/REST verwendet.
### Gutscheine (`wis_coupon`)
Metabox **„Gutschein Einstellungen“**:
- **Gutschein Code** (wird automatisch in Großbuchstaben gespeichert).
- **Rabattart**: „Festbetrag“ oder „Prozentual“.
- **Wert**: Coins oder Prozent, abhängig vom Typ.
- **Nutzungslimit**: Wie oft der Gutschein eingelöst werden darf.
- **Ablaufdatum** (optional).
- Hinweis, wenn global eingestellt ist, dass Gutscheine bei Angeboten nicht gelten.
Beim Speichern werden die Daten zusätzlich in der Tabelle `wp_wis_coupons` gespiegelt und `used_count` synchronisiert.
Beim Löschen eines Gutschein-Posts wird der Eintrag aus `wp_wis_coupons` wieder entfernt.
## REST API
Alle Routen liegen unter `wis/v1/…`.
- `POST /wis/v1/order`
- Erstellt eine neue Bestellung.
- Request-Body: `{ player, cart: [{id, quantity}], server, coupon_code? }`.
- Validiert Items (Preis > 0, Serverzuordnung, Angebot/Normal, Gutscheinlogik) und speichert Order inkl. JSON mit realen Item-IDs und ggf. Gutschein-Rabatt.
- `GET /wis/v1/pending_orders?player=Name`
- Liefert bis zu 10 offene Bestellungen (`status = pending`) eines Spielers.
- `POST /wis/v1/execute_order`
- Setzt Status einer Bestellung auf `processing` (z.B. wenn der Ingame-Executor mit der Ausgabe beginnt).
- `POST /wis/v1/complete_order`
- Setzt Status auf `completed`.
- `POST /wis/v1/cancel_order`
- Setzt Status auf `cancelled`.
- `POST /wis/v1/validate_coupon`
- Prüft einen Gutschein gegen aktuelle Cart-Daten (inkl. „nur normale Items“ Logik) und liefert Typ, Wert und Message.
- `POST /wis/v1/fetch_remote_data`
- Lädt JSON von externer URL (z.B. `https://minecraft-ids.com/data/1.21.10.json`) und gibt eine normalisierte Items-Liste zurück.
- `POST /wis/v1/import_batch`
- Importiert ein Items-Array als `wis_item`-Posts (draft, `_wis_item_id`, `_wis_price` = 0), überspringt Duplikate.
Alle REST-Endpunkte sind aktuell ohne Authentifizierung (`permission_callback => __return_true`), für öffentliche Nutzung sollte gegebenenfalls Absicherung ergänzt werden.
## Frontend Shortcode
Der Shop wird per Shortcode eingebunden:
```text
[ingame_shop_form]
```
## Layout & Funktionen
- Modernes Grid mit Karten (Bild, Name, Preis, Server, Badges, Menge).
- Filter: Suche, „Nur Angebote“, Server-Auswahl und Kategorie-Tabs.
- Badges:
- „🔥 Angebot“ für Sale-Items.
- „🎁 Angebot des Tages“ für den aktiven Daily Deal.
- Mengensteuerung je Item (Buttons + Input).
- Warenkorb-Button (Badge mit Gesamtanzahl der Items) öffnet ein Modal.
- Gutscheincode-Feld im Checkout mit Live-Validierung via `validate_coupon`.
- Dynamische Berechnung:
- Normaler Teil des Warenkorbs, ggf. rabattiert.
- Angebots-Items, die optional von Gutscheinen ausgenommen sind.
- Validierung:
- Alle ausgewählten Items müssen für den gewählten Server freigeschaltet sein.
- Spielername und Server sind Pflichtfelder.
- Beim Abschließen des Kaufs wird `POST /wis/v1/order` aufgerufen, die Antwort wird im Modal angezeigt und der Warenkorb geleert.
## Datenbank-Struktur
### Tabelle `wp_wis_orders`
- `id` Auto-Increment.
- `player_name` Spielername.
- `server` Server-Slug (`wis_server` Postname).
- `item_id` Hier für den Warenkorb pauschal `multi_item_cart`.
- `item_title` Lesbare Zusammenfassung (z.B. „Warenkorb: 1x Diamant, 64x Stein…“).
- `price` Endpreis nach Rabatt.
- `quantity` Anzahl der unterschiedlichen Items im Warenkorb.
- `status` `pending`, `processing`, `completed`, `cancelled`, `failed`.
- `response` JSON mit `items` (real Item IDs + Mengen) und optionalem `coupon`.
- `created_at` Timestamp.
### Tabelle `wp_wis_coupons`
- `id` Auto-Increment.
- `code` Gutschein-Code (unique).
- `value` Wert (Coins oder Prozent).
- `type` `fixed` oder `percent`.
- `usage_limit` Maximal verwendbar.
- `used_count` Bisherige Verwendung.
- `expiry` Ablaufdatum.
- `created_at` Timestamp.
## Cron & Daily Deal
- Beim Aktivieren wird ein tägliches Event `wis_daily_deal_event` registriert.
- Callback `WIS_Activator::run_daily_deal()`:
- Deaktiviert das aktuelle Daily-Deal-Item (`_wis_daily_deal` → 0).
- Wählt ein random `wis_item` mit `_wis_price > 0` und ohne `_wis_daily_deal`-Meta.
- Berechnet den Rabatt basierend auf `wis_daily_deal_discount` und setzt `_wis_is_offer` + `_wis_offer_price`.
## Bulk Import
- Im Admin-Overview vorhanden.
- Eingabefeld für die Import-URL (Default: `https://minecraft-ids.com/data/1.21.10.json`).
- Button „Daten laden“ → lädt via REST `fetch_remote_data` und zeigt Anzahl Items an.
- Button „Import starten“ → ruft wiederholt `import_batch` mit Batches von 20 Items auf und zeigt Fortschritt an.
- Vorhandene Items (gleiche `_wis_item_id`) werden übersprungen, neue Items als Draft mit Preis 0 angelegt.
Für eine GitHub-README kannst du diesen Text direkt verwenden oder nur einzelne Abschnitte übernehmen und oben ggf. Screenshots/GIFs ergänzen.