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

99 €/h

Datenschutz & Beratung

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.

Wie kann unsere Zusammenarbeit starten?

Eine Zusammenarbeit kann ganz flexibel stattfinden. Sporadisch oder regelmäßig. Häufig ist es so:

  1. Wir lernen uns in einem Meeting (telefonisch, per Teams, oder vor Ort) kennen. Sie schildern, was Sie benötigen. Ich stelle mich und das dazu passende Portfolio vor. Im Gespräch nutze ich auch meinen IT-Services-Katalog, um ggf. bisher unbekannte aber relevante Punkte zu identifizieren.
  2. Falls Sie eine monatliche Wartung benötigen, sende ich Ihnen im Nachgang ein passendes Angebot zu. Dazu lege ich einen Vorschlag für einen Verarbeitungsvertrag zur Wahrung der DSGVO. (Falls Sie eine eigenen Vorlage haben, nehmen wir gern die.) Falls wir bereits konkrete Themen identifiziert haben, sind diese ebenfalls im Angebot gelistet.
  3. Ich kümmere mich nach Ihrem “OK” fortan um Ihre IT-Themen und bin Ihr IT-Dienstleister.