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:diamondminecraft_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:

[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.

Description
No description provided
Readme 63 KiB
1.0.0 Latest
2026-01-06 18:22:00 +00:00
Languages
PHP 80.1%
Java 19.9%