Kundenkonto erstellen je nach Produkte de-/aktivieren

  • In unserem WooCommerce-Shop biete ich ein Produkt an, bei denen der Nutzer an der Kasse keine Möglichkeit bekommen soll, ein Kundenkonto anzulegen. Bei allen anderen Produkten ist es dagegen schon wünschenswert, wenn ein Kundenkonto leicht beim Kauf angelegt werden kann.

    Vom Prinzip sollen also immer die Hinweise fürs Kundenkonto erscheinen, es sei denn, ein bestimmtes Produkt liegt im Warenkorb.

    Fällt euch da spontan ein Lösungsansatz ein? Welches Hooks wäre da ein guter Einstiegspunkt?

    Gruß

    • 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

  • Welches Hooks wäre da ein guter Einstiegspunkt?

    woocommerce_before_checkout_form

    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.

  • Ich habe jetzt woocommerce_after_checkout_billing_form genommen, da das wohl der letzte Hook davor ist. Falls andere ein ähnliches Problem haben, hier mal meine Lösung:

    Gruß

  • $cartItem['product_id']

    Schau mal in Dein error.log. Ich würde annehmen wollen, dass Du bei WooCommerce 3.0 "Deprecated" Meldungen erhältst. Mit den neuen CRUD Klassen scheibt man $cartItem->get_product_id()

    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.

  • Schau mal in Dein error.log. Ich würde annehmen wollen, dass Du bei WooCommerce 3.0 "Deprecated" Meldungen erhältst. Mit den neuen CRUD Klassen scheibt man $cartItem->get_product_id()


    Bin gerade bei der Umstellung auf WC 3 und auch da wird noch ein Array geliefert. Auch in der Doku steht dazu:

    Zitat

    get_cart( )
    Returns the contents of the cart in an array.

    Da hat man also CRUD noch nicht implementiert.

  • Da hat man also CRUD noch nicht implementiert.

    Es geht NICHT um den Inhalt des Warenkorbs per se, sondern um die Eigenschaften der darin enthaltenen Produkte. Diese - die Eigenschaften der Produkte - müssen über die CRUD Klassen abgefragt werden.

    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.

  • $cartItem['data']->get_id()

    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.

  • Ok, aber nur bei einem einfachen Produkt. Bei einem variablen Produkt wäre es [COLOR=#333333]$cartItem['data']->[/COLOR]get_parent_id(), da in ['data'] ein WC_Product_Variation-Objekt ist. Ist nicht wirklich gut durchdacht.

    Da momentan bei $cartItem['product_id'] noch keine Deprecation-Warnung kommt, gehe ich mal davon aus, dass es noch eine Weile erhalten bleibt und lasse es erst mal so. Ich hab’s aber zumindest auf dem Schirm.

  • Es geht NICHT um den Inhalt des Warenkorbs per se, sondern um die Eigenschaften der darin enthaltenen Produkte. Diese - die Eigenschaften der Produkte - müssen über die CRUD Klassen abgefragt werden.


    Hast du eine Idee, warum man die ID oder Parent-ID mit get_id() oder get_parent_id() abfragen kann, jedoch nicht den post_type? Die Methode get_post_type() gibt es nicht und ich muss da dann wieder auf die Eigenschaft zurückgreifen.

    Das scheint mir alles noch sehr schwammig implementiert zu sein.

  • Der Post Type ist eine "Sache" von WordPress und nicht von WooCommerce. WooCommerce erstellt die Post Types aber WordPress implementiert das Objekt. Daher ist der Post Type nicht Bestandteil der WooCommerce CRUD Klassen.

    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.

  • Hmm, die Klasse WC_Product_Variation ist aber inkl. alle Elternklassen eine reine WC-Klasse und entweder GRUD wird konsequent umgesetzt oder nicht. Außerdem ist der WordPress post_type von einem variablen Produkt in der Tabelle wp_posts = 'product' und in der Klasse wird für post_type aber 'product_variation' zurückgegeben. Das kommt also schon von WooCommerce.

    Ich habe aber gerade gesehen, dass man mit get_type() zumindest den Typ ohne die „rohe“ Eigenschaft ermitteln kann.

  • Du wirfst die Dinge durcheinander. Die PHP Klasse definiert in WooCommerce die Eigenschaften des Objekts. Die Objekte können z.B. die Posttypes sein, die WooCommerce erstellt. Die Tatsache, dass es Posttypes gibt ist und bleibt Sache von WordPress. Am besten Du liest Dich in das Thema mal gründlich ein.

    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.

  • Mit sauberen Klassendefinitionen kenne ich mich schon gut aus und das ist eben in meinen Augen nicht ganz sauber gemacht. Du kannst nicht einfach sagen, dass post_type von WordPress kommt und deshalb nicht von CRUD erfasst werden muss. Dann sollte es get_id() nämlich genauso nicht geben, da die ID auch von WordPress kommt.

    Sauber wäre es IMHO, wenn post_type gar nicht erst in den Daten landen würde. Mit get_type() gibt es ja einen Funktion für den Produkt-Typ und wer post_type tatsächlich benötigt, kann es sich anderweitig besorgen.

  • Du kannst nicht einfach sagen, dass post_type von WordPress kommt und deshalb nicht von CRUD erfasst werden muss.

    Das sage nicht ich sondern die Entwickler von WooCommerce. Wenn Du Dich mit der Entwicklung auskennst frage ich mich was Dein Thread hier soll? Zu faul zum Suchen? Du fragst nach Dingen die für einen Entwickler nach 15 Minuten Studium des zurück gegebenen Objekts, der zuständigen Klasse(n) und der CRUD Dokumentation klar sind. Gleichzeitig meckerst Du über die Umsetzung. Das darfst Du gerne machen aber dann mach es an der richtigen Stelle -> https://github.com/woocommerce/woocommerce.

    Ach ja, ich habe gern geholfen. Nichts zu danken!

    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.

  • In meinem Posting habe ich nach einem passenden Hook gefragt und der war für mich nicht in 15 Minuten zu finden. Danke für die schnelle und richtige Antwort! Danach ging es um CRUD und ich war irritiert, weil du $cartItem->get_product_id() genannt hast, was es aber gar nicht gibt. Deshalb hatte ich nachgefragt und so hat sich die ganze Diskussion entwickelt.

    Ich hatte sowieso vor, das auf Github zu melden und damit können wir das Thema gerne abschließen.

Jetzt mitmachen!

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