Support » WooCommerce » Standortwahl mit Produktfilter

  • Gelöst moodybluez

    (@moodybluez)


    Hallo zusammen!

    Ich suche aktuell nach einer Möglichkeit in WooCommerce eine Dropdown für Endbenutzer zu integrieren, mit der sie erst einen Standort/Shop wählen müssen bevor Produkte in den Warenkorb gelegt werden können.
    Die Standortwahl sollte als Cookie gespeichert werden und global Produkte filtern. Sprich für Standort A gibt es Artikel A, B und C. Für Standort B jedoch z.B. nur Produkt C.

    Gibt es für diesen Zweck eventuell bereits ein Plugin? Wenn nicht, könnte man sowas programmiertechnisch mithilfe von WooCommerce Hooks umsetzen?

Ansicht von 11 Antworten - 1 bis 11 (von insgesamt 11)
  • Zufälle gibts!
    Wir haben sowas gerade erst umgesetzt in PHP.

    Plugin kenn ich dazu keines.
    Aber die Umsetzung ist ziemlich easy. Ok, wenn man die Interna kennt.

    Also einfach das Dropdown machen, Cookie setzen und mit pre_get_posts die Produkte (NUR DIE PRODUKTE) filtern. Und auch nur, wenn du im Frontend bist, also nicht bei is_admin() usw usf.
    Du kannst dir bei Verwendung vom pre_get_posts Hook sehr viel kaputt machen, also schau, dass du ziemlich genau abzielst und mit template tags alles Andere ausschließt.

    Aber dann?
    Gehts easy!
    Einfach bei einem frühen Hook (schau bei der Ausgabe von query_monitor nach) pre_get_posts Filter aufrufen mit dem Parameter aus dem Cookie.
    Done!

    Das is wirklich schnell runterprogrammiert!

    Abgesehen von einigen Füllsätzen und etwas Eigenwerbung sehe ich in deiner Antwort noch nicht so ganz, wie das zur Lösung des Problems beiträgt. Was hat ein pre_get_posts-Filter mit der Auswahl des Standorts zu tun? Du schreibst zwar „Geht easy“, lieferst dann aber nur einen Hook-Namen. Oder übersehe ich da etwas?

    Gibts dazu auch noch einen konstruktiven Beitrag? Oder was soll der Kommentar??

    Ich kann nichts dafür, wenn du die Lösung nicht verstehst.

    Es ist easy:

    Das Dropdown setzt mit JS oder HTTP-Call das Cookie.
    Das Cookie liest du im pre_get_posts Filter aus und schränkst die wp_query für alle WooCommerce-Produkte ein.
    Dadurch werden automatisch nur die eingeschränkten Produkte angezeigt.

    Das ist jetzt die exakt gleiche Beschreibung von oben.
    Es sind nicht mehr Schritte.
    Lies dich bitte in pre_get_posts ein.

    Du bist Moderator und findest es selbst gut, einfach so eine Antwort eines Anderen zu kritisieren, ohne selbst was beizutragen???

    ad Eigenwerbung
    Bitte keine Unterstellungen hier im Forum!
    Und bitte generell an die Forenregeln halten -.-

    • Diese Antwort wurde geändert vor 2 Jahren, 2 Monaten von souri.
    Thread-Starter moodybluez

    (@moodybluez)

    @pixolin Ich finde die Antwort von @souri hilfreich. Danke schon mal dafür! Hilft mir schon mal weiter und stößt mich in die richtige Richtung.

    Ginge anstatt „pre_get_posts“ auch „woocommerce_product_query“?

    Wie hast du es gelöst, wenn in der Select-Box nichts gewählt wurde? Theoretisch dürfte dann ja kein Produkt angezeigt werden.
    Und wie integriere ich die Dropdown ins Frontend? Geht das per Shortcode? Kenne mich gut mit PHP und JS aus aber wie/wo ich das in WP platzieren soll ist mir noch nicht ganz klar. Cool wäre wenn sich die Dropdown global im Nav-Menü platzieren lässt.

    @souri:
    Wenn du Probleme mit der Moderation des Forums hast, wende ich bitte an den Slack-Channel der deutschsprachigen Community. Wie bereits in einem anderen Thread hingewiesen wurde, ist das hier off topic.

    @pixolin Ja, bitte Offtopic-Dinge sollte man unterlassen

    @moodybluez
    Ja, ich denk mir eh, dass das hilfreich ist. Weil wir das auch genau so umgesetzt haben und wenn man ein bissl programmieren kann bzw sich mit WordPress-Code auskennt, helfen die Stichwörter hier.

    Das Forum ist nicht dafür gedacht, fixfertige Code-Lösungen zu bieten!
    Es ist ein allgemeines WordPress-Support Forum.

    Aber du scheinst dich eh auszukennen und dir hilfts. PERFEKT 🙂

    Wie hast du es gelöst, wenn in der Select-Box nichts gewählt wurde?

    Ich überprüf, ob ein Cookie gesetzt wurde.
    Ich überprüf, ob der Wert im Cookie in einem Array an Werten übereinstimmt – dadurch habe ich keine code injection. Weil, weißt eh: Jeder Userinput ist böse und von vornherein zu MISSTRAUEN!
    Erst wenn all das passt, dann änder ich die query in pre_get_posts.

    Theoretisch dürfte dann ja kein Produkt angezeigt werden.
    Bei uns ists so, dass dann alle Produkte angezeigt werden, und beim Produkt steht eh dabei, für (in deinem Fall) welche Region das Produkt gedacht ist.
    Aber du kannst es natürlich so lösen, dass keine Produkte gezeigt werden. Dann gehst im Template darauf ein und gibst eine Meldung aus.

    Ginge anstatt „pre_get_posts“ auch „woocommerce_product_query“?

    Ja, sicher!
    Danke für den Hinweis, das sind die Scheuklappen bei mir.
    Wir machen net nur stinknormale Webshops sondern Webapps.
    Daher gibts auch custom wp_querys, wo Dinge vermischt abgefragt werden. Für eigene Bereiche. Wo ich in einer Query irgendwas abfrage, aber auch WooCommerce Artikel.
    Und da ist pre_get_posts der sicherere Weg, wenn ich das pauschal abhandeln will.
    Natürlich kann ich das im wp_query Call auch machen, aber das geht halt net immer bzw macht pauschale Änderung Sinn.
    In deinem Fall ists wurscht, da sollte woocommerce_product_query die bessere Wahl sein, weil du weniger kaputt machen kannst!

    Und wie integriere ich die Dropdown ins Frontend?

    Du kennst pre_get_posts aber das Dropdown bereitet dir Kopfzerbrechen?
    😀
    Hm, kommt mir bekannt vor. Vielen guten Codern bereitet WordPress am Anfang kopfzerbrechen. Aber grad die template hierarchy und Templates erleichtern dir das Entwickler-Leben!

    Mach ein template_part, änder ein template_part oder ein Template, erstell einen Shortcode, benutzt einen Filter, um das Dropdown direkt danach auszugeben.
    Da gibts viele Wege 🙂

    Zurück zu den Templates und deiner Frage: Such, wo in deinem Template das Menü ausgegeben wird. Sollte zb in der header.php sein. Dort kannst du dann dein Dropdown (das DOM) reingeben.
    Oder du suchst dir einen Filter für das nav Menü und hängst dein DOM dran!

    • Diese Antwort wurde geändert vor 2 Jahren, 2 Monaten von souri.
    • Diese Antwort wurde geändert vor 2 Jahren, 2 Monaten von souri.
    Thread-Starter moodybluez

    (@moodybluez)

    @souri
    Das klingt ja echt super. Es war nicht mein Ziel eine fix fertige Lösung präsentiert zu bekommen, sondern einfach ein paar Ideen auszutauschen. Erst hatte ich nach einem Plugin gesucht aber nichts für diesen Zweck gefunden. Wundert mich ehrlich gesagt etwas, da diese Anforderung meiner Ansicht nach bestimmt schon öfter vorgekommen ist. Zumal auch einige Shops bei mir in Österreich genau dies so umgesetzt haben (Standorteingabe => bestimmtes Produktsortiment).
    Mehr oder weniger habe ich die Umsetzung nun im Kopf – genial also. 🙂

    Grundsätzlich ist die Integration einer Dropdown mit etwas JS Pipifax aber wie du sagst bin ich mit der allgemeinen WP-Struktur nicht gut vertraut. Ich werde wohl den Shortcode-Ansatz wählen und versuchen diesen irgendwo in das Nav-Template des Themes zu „wursteln“. Vermutlich werde ich die Dropdown nämlich noch an anderen Stellen verwenden müssen.

    Zusätzlich wird wohl auch eine Backend-Validierung beim Checkout nötig sein, ob die gewählten Produkte tatsächlich dem gewählten Standort entsprechen.

    Vielen Dank nochmal!

    Das klingt ja echt super.

    Ja, ich weiß! Mich freuen solche Dinge auch! Wie wir das umgesetzt hatten hab ich mir gedacht: GEIL! Welche Möglichkeiten dir WP out of the box gibt. Wie einfach du Dinge ändern kannst.
    Mir zaubert das immer ein Schmunzeln ins Gesicht, wenn ich sowas merk. Also wie einfach sich gravierende Dinge in WP/WC ändern lassen. Taugt ma!

    Es war nicht mein Ziel eine fix fertige Lösung präsentiert zu bekommen, sondern einfach ein paar Ideen auszutauschen

    Ja, eh.
    Wer ein Profi ist bzw sich mit dem Code auskennt, dem haben meine paar Zeilen am Anfang ja geholfen.
    Weil das die komplette Lösung, skizziert mit ein paar Stichworten, ist.
    Wer in der Materie drin ist, der kennt sich sofort aus!

    Es war nicht mein Ziel eine fix fertige Lösung präsentiert zu bekommen

    Aber es hält dich niemand davon ab, uns deine Lösung hier zu präsentieren 🙂
    Mich würds interessieren, weil ichs mit meiner vergleich und schauen kann, ob ich an Denkfehler hab!

    Wundert mich ehrlich gesagt etwas, da diese Anforderung meiner Ansicht nach bestimmt schon öfter vorgekommen ist.

    Kommt das so oft vor?
    Was öfters vorkommt ist, dass du Produkte nach Kategorien oder Tags anzeigen willst.
    Aber komplett alle Produkte „einer Kategorie“ von der Seite verschwinden lassen? Kommt das so oft vor?

    Zumal auch einige Shops bei mir in Österreich genau dies so umgesetzt haben

    Hast du da ein paar Links? Vl ist das eh WooCommerce und man kann mit dem DOM herausfinden, welche Plugins die dafür verwenden, falls.

    Zumal auch einige Shops bei mir in Österreich

    AH! Ebenfalls ein Österreicher, na dann: SERVASGRIASSDI!

    t bin ich mit der allgemeinen WP-Struktur nicht gut vertraut.

    Ja, ich merks, siehe Shortcode (gleich mehr dazu)
    Tu es dir an!
    Schau dir die template hierarchy an, installier dir query monitor und schau dir an, welche Templates bzw Template-Parts geladen werden.
    Das hilft sehr!

    Ich werde wohl den Shortcode-Ansatz wählen

    Don’t!
    Wenn du eh schon ins Template (Code) gehst, dann pick dort auch gleich den Code hin.
    Oder einen Funktionsaufruf. Oder inkludier mit get_template_part() das DOM direkt aus einem Php-File.
    Aber im Template Shortcodes verwenden?
    Don’t!
    Just no.
    Warum?
    Weil der Shortcode erst aufgelöst werden muss um die dahinterstehende Funktion abzuarbeiten.
    Erspars dir, und notier gleich den Funktionsaufruf statt dem Shortcode!
    Funktion oder Template-Part kapselt das Dropdown auch, und du kannst es an beliebiger Stelle weiterverwenden!

    Zusätzlich wird wohl auch eine Backend-Validierung beim Checkout nötig sein, ob die gewählten Produkte tatsächlich dem gewählten Standort entsprechen.

    Gut mitgedacht!

    Vielen Dank nochmal!

    Kein Problem!
    Ich mach den Support gerne, ohne irgendwelche Hintergedanken und gräme mich dabei nicht.
    Zudem hats mi ja wirkli gefreut, dass da jemand exakt das braucht, was wir erst vor kurzem gemacht haben.
    Daher hab ich die Umsetzung ja noch so präsent im Schädl 😀
    Deswegen auch die paar Zeilen, die die Lösung skizzieren und die auch für jeden verständlich ist, der sich auskennt.

    • Diese Antwort wurde geändert vor 2 Jahren, 2 Monaten von souri.

    @moodybluez Ist der Thread für dich dann durch bzw dein Problem gelöst? Wenn ja, markier den Thread bitte als gelöst!

    Thread-Starter moodybluez

    (@moodybluez)

    @souri Theoretisch schon. Ich kam bisher nicht dazu mit der Umsetzung zu starten. Ich setze den Thread mal auf gelöst und würde mich ggf. wieder melden sobald meine Lösung steht.

    Danke! 🙂

    Super! DANKE!

Ansicht von 11 Antworten - 1 bis 11 (von insgesamt 11)
  • Das Thema „Standortwahl mit Produktfilter“ ist für neue Antworten geschlossen.