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_ordersmit 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_categorymit 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
- Plugin-Datei (
wp-ingame-shop-pro.phpo. ä.) in den Ordnerwp-content/plugins/wp-ingame-shop-prolegen. - Im WordPress-Backend unter „Plugins“ das Plugin aktivieren.
- Bei Aktivierung werden automatisch die Tabellen
wp_wis_ordersundwp_wis_couponserstellt sowie Cron-Events für den Daily Deal registriert. - Cron muss auf dem Server funktionieren (WP-Cron oder System-Cron, der
wp-cron.phptriggert).
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.pngangehängt wird, z. B.https://assets.minecraft-ids.com/1_21_10/.
- Basis-URL, an die
- 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.
- Checkbox-Liste aller
- 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.
- Checkbox-Liste aller definierten
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.
- Liefert bis zu 10 offene Bestellungen (
POST /wis/v1/execute_order- Setzt Status einer Bestellung auf
processing(z. B. wenn der Ingame-Executor mit der Ausgabe beginnt).
- Setzt Status einer Bestellung auf
POST /wis/v1/complete_order- Setzt Status auf
completed.
- Setzt Status auf
POST /wis/v1/cancel_order- Setzt Status auf
cancelled.
- Setzt Status auf
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.
- Lädt JSON von externer URL (z. B.
POST /wis/v1/import_batch- Importiert ein Items-Array als
wis_item-Posts (draft,_wis_item_id,_wis_price= 0), überspringt Duplikate.
- Importiert ein Items-Array als
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:
[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/orderaufgerufen, 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_serverPostname).item_id– Hier für den Warenkorb pauschalmulti_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 mititems(real Item IDs + Mengen) und optionalemcoupon.created_at– Timestamp.
Tabelle wp_wis_coupons
id– Auto-Increment.code– Gutschein-Code (unique).value– Wert (Coins oder Prozent).type–fixedoderpercent.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_eventregistriert. - Callback
WIS_Activator::run_daily_deal():- Deaktiviert das aktuelle Daily-Deal-Item (
_wis_daily_deal→ 0). - Wählt ein random
wis_itemmit_wis_price > 0und ohne_wis_daily_deal-Meta. - Berechnet den Rabatt basierend auf
wis_daily_deal_discountund setzt_wis_is_offer+_wis_offer_price.
- Deaktiviert das aktuelle Daily-Deal-Item (
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_dataund zeigt Anzahl Items an. - Button „Import starten“ → ruft wiederholt
import_batchmit 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.