Woocommerce Bookings: Anzahl verfügbarer Plätze im Frontend anzeigen lassen
Ein Kunde wollte für seine angebotenen Dienstleistungen das Premium WordPress Plugin Woocommerce Bookings nutzen. Aber auch ein Premium Plugin, welches für $250 zu erwerben ist, kann nicht alles. Zum Beispiel konnte es nicht die Anzahl der noch verfügbaren Booking Slots im Frontend der Webseite anzeigen lassen.
Um dieses Problem zu lösen, haben wir uns mit dem Code des Plugins auseinandergesetzt und ein Snippet gebaut, welches dieses Problem löst.
Schritt-für-Schritt-Implementierung
Um verfügbare Buchungsplätze anzuzeigen, verwenden wir eine Kombination aus WordPress-Hooks, Datenbankabfragen und PHP. Der folgende Code-Snippet erfüllt diese Aufgabe. Wenn Sie diesen Code selbst nutzen wollen, dann nutzen Sie bitte unbedingt ein Plugin, welches es erlaubt Snippets hinzuzufügen. Ansonsten laufen Sie Gefahr, dass der Code beim nächsten Theme oder WordPress Update nicht mehr funktioniert.
add_action('woocommerce_before_add_to_cart_form', 'show_available_slots'); function show_available_slots() { global $product; if ($product->is_type('booking')) { global $wpdb; // Abrufen der Post-ID des aktuellen Produkts $post_id = $product->get_id(); // Abfragen der Gesamtzahl der verfügbaren Plätze aus der Datenbank $meta_key = '_wc_booking_qty'; $total_slots = $wpdb->get_var($wpdb->prepare( "SELECT meta_value FROM {$wpdb->postmeta} WHERE post_id = %d AND meta_key = %s", $post_id, $meta_key )); // Wenn keine verfügbaren Plätze gefunden wurden, Standardwert auf 0 setzen if (!$total_slots) { $total_slots = 0; } // Abfragen der gebuchten Plätze durch Summierung der Personenzahl für jede Buchung $results = $wpdb->get_results($wpdb->prepare( "SELECT pm2.meta_value FROM {$wpdb->postmeta} pm INNER JOIN {$wpdb->posts} p ON pm.post_id = p.ID INNER JOIN {$wpdb->postmeta} pm2 ON p.ID = pm2.post_id WHERE pm.meta_key = '_booking_product_id' AND pm.meta_value = %d AND pm2.meta_key = '_booking_persons' AND p.post_status IN ('confirmed', 'paid', 'complete')", $post_id )); $booked_slots = 0; // Schleife durch die Ergebnisse und Deserialisieren der Personenzahl foreach ($results as $result) { $persons = maybe_unserialize($result->meta_value); if (is_array($persons)) { $booked_slots += array_sum($persons); } } // Berechnen der verfügbaren Plätze $available_slots = $total_slots - $booked_slots; if ($available_slots < 0) { $available_slots = 0; } echo ''; echo ''; } }' . sprintf(__('Freie Plätze: %s', 'woocommerce-bookings'), $available_slots) . '
'; echo 'Bitte wählen Sie im Kalender das gewünschte Datum aus (grün hinterlegt).
'; echo '
Erklärung des Codes
Hook in woocommerce_before_add_to_cart_form
: Dieser Hook sorgt dafür, dass unsere Funktion ausgeführt wird, bevor das Formular zum Hinzufügen zum Warenkorb angezeigt wird, sodass die Verfügbarkeitsinformationen für den Kunden sichtbar sind.
Prüfen, ob das Produkt vom Typ ‘booking’ ist: Der Code überprüft, ob das aktuelle Produkt vom Typ ‘booking’ ist. Wenn nicht, wird nichts ausgeführt.
Abfragen der Gesamtzahl der Plätze: Mit $wpdb
rufen wir die Gesamtzahl der verfügbaren Plätze für das Produkt aus der Datenbank ab.
Abfragen der gebuchten Plätze: Wir fragen die Anzahl der gebuchten Plätze ab, indem wir die Personenzahl für jede Buchung, die dem aktuellen Produkt entspricht und den Status ‘confirmed’, ‘paid’ oder ‘complete’ hat, summieren.
Berechnen der verfügbaren Plätze: Wir subtrahieren die gebuchten Plätze von den Gesamtplätzen, um die Anzahl der verfügbaren Plätze zu erhalten. Wenn das Ergebnis negativ ist, setzen wir es auf null.
Anzeige der verfügbaren Plätze: Schließlich geben wir die verfügbaren Plätze und eine Aufforderung an den Benutzer aus, das gewünschte Datum im Kalender auszuwählen.
Fazit
Durch die Implementierung des obigen Codes stellen Sie Ihren Kunden Echtzeitinformationen zur Platzverfügbarkeit zur Verfügung, verbessern deren Buchungserlebnis und reduzieren potenzielle Konflikte. Passen Sie das Skript gerne weiter an, um es an Ihre spezifischen Bedürfnisse anzupassen.
Mit dieser Anleitung können Sie Ihr WooCommerce-Buchungssystem benutzerfreundlicher und effizienter gestalten. Viel Erfolg beim Programmieren!
IT-Beratung & IT-Support
Mein IT-Portfolio enthält alles, was Unternehmen im Bereich von ca. 1-50 Mitarbeiter benötigen. Daher kann ich Sie ganzheitlich betreuen. Sie haben einen Ansprechpartner. Wenn gewünscht, kümmere ich mich um Ihre gesamte IT oder auch nur um Teile.
Allgemeine IT-Beratung
- Allg. Problemlösung
- Installation & Einrichtung
- Windows-Installation
- Fernwartung per TeamViewer
- Virenbereinigung
- Internetanbindung
89 €/h
Cloud & Infrastruktur
- Microsoft 365 (Exchange, SharePoint, OneDrive, Teams, …)
- Backup über Acronis
- Cloud-Telefonie
- Windows-Server-Support
- Anti-Virus mit Defender und Sophos (MSP-Partner)
- Netzwerk & Firewall
99 €/h
Website & drum herum
- Design & Erstellung
(WordPress-Profi) - Hosting & Wartung & Pflege
- Optimierung (z.B. SEO, Geschwindigkeit, DSGVO)
- Google Ads und Search
- Backup & Recovery
- Programmierung (PHP, JS, MySQL, HTML, CSS)
- Video-Header/Grafik-Erstellung
99 €/h
Datenschutz & Beratung
- Unterstützung bei DSGVO und BDSG-neu
- Datenschutzschulung für Angestellte
- Bestellung als Datenschutzbeauftragter
- ISO 9.001-Beratung
- Prozess-Optimierung
- Beratung zu anderen IT-verwandten Themen z.B. Inventarisierung
- Monitoring mit Nagios
129 €/h
- Abrechnung stets kundenorientiert und im 5 Minutentakt
- klare, verständliche Positionen mit Umsetzungsdatum
- Ihr Ziel ist mein Fokus, das wir zusammen erreichen
Hier finden Sie mehr über mich.