WooCommerce Online Ticketsystem läuft... Optionaler Hardticket Versand integrieren?

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Welche Zahlungsart hattest Du verwendet, Wordleo? Ist der evtl. gar nicht bis dahin gekommen, den Status auf Hardcopy zu setzen?

    Hi - warte mal kurz. Ich hab ja überall gerade 0 Euro drin wegen Testzwecken. Da kommen dann keine Bezahlten zur Auswahl und es läuft direkt durch. Ich mach mal Beträge rein und spiel das durch.

    GLG

  • Hmmm - hast Du noch eine Idee, woran das liegen könnte, mensmaximus? Kann ich einen Custom Status nicht zuweisen?

    Ich hab das nun schon richtig verstanden. Du will einen extra Status anlegen für Hardcopy in dem dann die PDF's generiert werden - ja?

    Aber dann kommen die überschüßigen doch trotzdem weil soweit ich das sehe. "Zahlung ausstehen" und "In Bearbeitung" und "Completed" ja immer durchlaufen werden...
    - oder war das die Geschichte mit dem woohelper.php

    GLG

  • Richtig, Ich will jeder Bestellung, die Post-Versand erfordert, den Status Hardcopy geben und dann mit einem Hook für diesen Status die Funktion aufrufen.

    Du machst Dir das Leben zu schwer:

    if ( true == $hardcopy_checkbox {
    do_action( 'dein_hook', $order );
    }

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Okay, mensmaximus hat eindeutig mehr Ahnung von woocommerce :razz:.

    Mach bei dem else mal das update_status wieder weg,

    Und dann setzt Du stattdessen zwischen die geschweiften Klammern:

    do_action('woocommerce_order_status_completed',$the_order);

    Ohne Leerzeichen zwischen h und e_ .

  • Okay, mensmaximus hat eindeutig mehr Ahnung von woocommerce :razz:.

    Mach bei dem else mal das update_status wieder weg,

    Und dann setzt Du stattdessen zwischen die geschweiften Klammern:

    do_action('woocommerce_order_status_completed',$the_order);

    Ohne Leerzeichen zwischen h und e_ .

    Bin grad am kochen. Melde mich später nochmal. Dann mit der vollständigen Idee. Lehnt Euch erst mal zurück. Pause.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Okay, mensmaximus hat eindeutig mehr Ahnung von woocommerce :razz:.

    Mach bei dem else mal das update_status wieder weg,

    Und dann setzt Du stattdessen zwischen die geschweiften Klammern:

    do_action('woocommerce_order_status_completed',$the_order);

    Ohne Leerzeichen zwischen h und e_ .


    Hi - nun wird's richtig wild!

    1. Email "Bestelleingang"
    2. Email "Zahlungsbestätigung"
    3. Email "Bestellung fertiggestellt"?

    Status steht auf "In Bearbeitung" -> Kein PDF...

    GLG

  • Ich habe verstanden, dass ein Kunde bei einer Bestellung auswählen können soll, dass er die Tickets per Post bekommt. Dafür muss er zahlen.

    Den Punkt hat Azrael teileweise umgesetzt, in dem er eine Checkbox eingebaut hat und die Gebühr im Checkout korrekt in das Bestellobjekt übergibt. Der Checkboxstatus selbst ist aber noch nicht als Order Meta gespeichert. Das muss noch passieren.

    Code
    add_action( 'woocommerce_checkout_update_order_meta', 'mmx_update_order_meta' );
    function mmx_update_order_meta( $order_id ) {
        if ( isset( $_POST['checkbox_name'] ) ) {
            update_post_meta( $order_id, 'ticketversand', 1 );
        }
    }

    Jetzt kommt der Teil mit dem Ticketversand. Solange der Kunde im Checkout die Option für den Versand nicht auswählt, ändert sich nichts.

    Man muss sich also "nur" auf den Fall konzentrieren, wenn die Checkbox ausgewählt ist.

    Wenn das der Fall, ist soll die FooEvents Funktion für die PDF Erstellung ausgelöst werden, unabhängig vom Status der Bestellung. Gleichzeitig soll aber verhindert werden, dass FooEvents die Funktion ebenfalls ausführt wenn der Status 'completed' ist. An dieser Stelle müssen wir zwei Dinge beachten:

    1. Die Statusänderung geschieht an mehreren Stellen, wie z.B. bei der Rückmeldung von Zahlungsgateways und im Backend bei einer manuelle Änderung.
    2. Mehrere Statusänderungen können hintereinander passieren (on-hold, processing, completed oder on-hold, completed)

    Beide Punkte müssen Berücksichtigung finden. Die Statusänderung wird in der Methode status_transition() in der Klasse WC_Order statt. FooEvents hooked bereits zum frühest möglichen Zeitpunkt in dieser Methode ein: add_action('woocommerce_order_status_completed', array(&$this, 'process_order_tickets'), 10, 1);

    Zum Glück verwendet FooEvents die Priorität 10. Das ist zwar früher als der Standard 20, aber wir haben noch genug 'Luft' um vorher einzuhooken. Also hängen wir eine eigene Funktion ein, welche die FooEvents Funktion deaktiviert falls die Tickets versendet werden sollen:

    Wie die remove_action Syntax lauten muss, hängt davon ab wie die Klasse von FooEvents heißt und wie sie instanziiert wird. Da ich den Quellcode nicht kenne habe ich einfach mal 3 Beispiele aufgeführt. Die Methode muss natürlich nur einmal entfernt werden (nicht 3x)

    Jetzt fehlt noch die Funktion zum Ausführen der Methode beim Status processing falls die Tickets versendet werden sollen. Dazu machen wir nicht anderes als die Originalfunktion von FooEvents an anderer Stelle einzuhooken:

    Code
    add_action('woocommerce_order_status_processing', 'mmx_maybe_process_order_tickets', 5, 2); 
    function mmx_maybe_process_order_tickets( $order_id, $status_transition ){
        $order = wc_get_order( $order_id );
        $ship_tickets = $order->get_meta('ticketversand');
        if( $ship_tickets ){
            // add_action( 'woocommerce_order_status_processing', array( FooEventClass::instance(), 'process_order_tickets' ), 10, 1 );
            // add_action( 'woocommerce_order_status_processing', array( 'FooEventClass', 'process_order_tickets' ), 10, 1 );
        }
    }

    Wie die add_action Syntax lauten muss, hängt davon ab wie die Klasse von FooEvents heißt und wie sie instanziiert wird. Da ich den Quellcode nicht kenne habe ich einfach mal 2 Beispiele aufgeführt. Die Methode muss natürlich nur einmal eingehängt werden (nicht 2x)

    Wenn das Plugin sauber geschrieben ist haben wir jetzt die Funktion erfolgreich umgehängt, falls der Ticketversand gewünscht wird.

    Der Quellcode ist nicht geprüft und dient nur der Veranschaulichung der Logik.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Ja Wahnsinn Maximus...

    Das werde ich mir jetzt mal in Ruhe durchdenken... WOW...

    GLG

    Ich schlage vor, dass Azrael sich das anschaut (wenn er noch Lust hat) und in seine Syntax einbaut (Checkboxname, Metaname, usw) sowie die Instanzierung der FooEvents Klasse prüft um die Methode porcess_order_tickets() korrekt zu behandeln (remove_action, add_action). Das ist ein wenig fummelig. Es ist ja auch gar nicht sicher gestellt, dass ich alles verstanden habe. Aber Azrael kann anhand meiner Logik seine Logik anpassen.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • So, neues Plugin. Lokal wirft das bei mir keinen Fehler, probier mal, ob das tut wie gewünscht.

  • Warum machst Du den Include? Und warum nicht den gesamten Code in einer Datei?

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!