1. Herzlich willkommen bei WPDE.org, dem grössten und ältesten deutschsprachigen Community-Forum rund um das Thema WordPress. Du musst angemeldet oder registriert sein, um Beiträge verfassen zu können.
    Information ausblenden

Kundenkonto erstellen je nach Produkte de-/aktivieren

Dieses Thema im Forum "WooCommerce" wurde erstellt von Babelfisch, 11. April 2017.

Schlagworte:
  1. Babelfisch

    Babelfisch Well-Known Member

    Registriert seit:
    17. Mai 2016
    Beiträge:
    60
    Zustimmungen:
    4
    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ß
     
  2. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    8.857
    Zustimmungen:
    437
    woocommerce_before_checkout_form
     
  3. Babelfisch

    Babelfisch Well-Known Member

    Registriert seit:
    17. Mai 2016
    Beiträge:
    60
    Zustimmungen:
    4
    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:

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Gruß
     
  4. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    8.857
    Zustimmungen:
    437
    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()
     
  5. Babelfisch

    Babelfisch Well-Known Member

    Registriert seit:
    17. Mai 2016
    Beiträge:
    60
    Zustimmungen:
    4
    Danke für den Hinweis! Ich bin noch bei 2.7, da die 3er bisher noch zu viele Baustellen hat. Werde frühestens bei 3.1 umsteigen.
     
  6. Babelfisch

    Babelfisch Well-Known Member

    Registriert seit:
    17. Mai 2016
    Beiträge:
    60
    Zustimmungen:
    4
    Bin gerade bei der Umstellung auf WC 3 und auch da wird noch ein Array geliefert. Auch in der Doku steht dazu:

    Da hat man also CRUD noch nicht implementiert.
     
  7. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    8.857
    Zustimmungen:
    437
    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.
     
  8. Babelfisch

    Babelfisch Well-Known Member

    Registriert seit:
    17. Mai 2016
    Beiträge:
    60
    Zustimmungen:
    4
    Ok, aber wie würde das in meinem Beispiel aussehen? Deine Variante $cartItem->get_product_id() geht so erst mal nicht, da $cartItem eben ein Array und kein Objekt ist.
     
  9. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    8.857
    Zustimmungen:
    437
    $cartItem['data']->get_id()
     
  10. Babelfisch

    Babelfisch Well-Known Member

    Registriert seit:
    17. Mai 2016
    Beiträge:
    60
    Zustimmungen:
    4
    Ok, aber nur bei einem einfachen Produkt. Bei einem variablen Produkt wäre es $cartItem['data']->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.
     
  11. Babelfisch

    Babelfisch Well-Known Member

    Registriert seit:
    17. Mai 2016
    Beiträge:
    60
    Zustimmungen:
    4
    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.
     
  12. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    8.857
    Zustimmungen:
    437
    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.
     
  13. Babelfisch

    Babelfisch Well-Known Member

    Registriert seit:
    17. Mai 2016
    Beiträge:
    60
    Zustimmungen:
    4
    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.
     
  14. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    8.857
    Zustimmungen:
    437
    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.
     
  15. Babelfisch

    Babelfisch Well-Known Member

    Registriert seit:
    17. Mai 2016
    Beiträge:
    60
    Zustimmungen:
    4
    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.
     
  16. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    8.857
    Zustimmungen:
    437
    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!
     
  17. Babelfisch

    Babelfisch Well-Known Member

    Registriert seit:
    17. Mai 2016
    Beiträge:
    60
    Zustimmungen:
    4
    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.
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden