Wdrożenie Omnibusa w sklepie na WooCommerce (kurs)

Strony internetowe, sklepy internetowe, czy – zwłaszcza ostatnio – platformy kursowe zazwyczaj stawiam dla innych. Czasem jednak i mi zamarzy się jakaś strona, sklep czy platforma kursowa. I tak obecnie pracuje nad swoim nowym projektem, którego głównym elementem – spajającym pozostałe systemy – będzie WooCommerce. Wczoraj dotarłem do ustawień związanych z kontami użytkowników, a konkretnie ich automatycznym zakładaniem podczas składania zamówienia.

E-mail jako nazwa użytkownika w WooCommerce (WordPress)

Oczywiście WooCommerce posiada odpowiednie opcje, dzięki którym możemy zdecydować, nie tylko o tym, czy w naszym sklepie będzie można założyć konto, czy zakupy będą mogli robić tzw. goście (zakupy bez zakładania konta). Czy też zakup wiąże się z obowiązkowym założeniem konta, co ma sens zwłaszcza w przypadku sklepów z kursami internetowymi, gdzie z założenia nabywca będzie miał dłuższy kontakt z naszym produktem (np. kursem).

Gdy chcemy, by konto było obowiązkowe, możemy w ustawieniach WooCommerce (WooCommerce -> ustawienia -> konta i prywatność) zaznaczyć opcje:

  • Pozwól kupującym logować się do istniejących kont podczas składania zamówienia
  • Pozwól kupującym tworzyć konta podczas składania zamówienia
  • Podczas tworzenia konta, automatycznie wygeneruj nazwę użytkownika dla klienta na podstawie jego imienia, nazwiska lub adresu e-mail
  • Podczas tworzenia konta, automatycznie generuj hasło do konta

Dzięki temu podczas składania zamówienia każdemu użytkownikowi – poza tymi, co już mają konto, bo np. kupowali coś wcześniej – zostanie założone konto użytkownika, a dane niezbędne do logowania (nazwa użytkownika i hasło) zostaną wygenerowane automatycznie, i wysłane na adres e-mail podany przy zamówieniu.

I teoretycznie wszytko jest tak, jak być powinno – jest hasło, jest nazwa użytkownika, która zostanie utworzona na podstawie adresu e-mail, czyli w większości przypadku będzie to to, co znajduje się przed „małpką”. A użytkownik może zalogować się korzystając z tej nazwy użytkownika, lub z adres e-mail.

Ale powiedzmy, że ze względów logistyczno-estetycznych wole wariant, gdy nazwa użytkownika to adres e-mail, bez innych możliwości (kombinacji). Tu z pomocą przychodzi mały kawałek kodu, który można umieścić np. w pliku functions.php motywu potomnego:

function webinsider_wp_woocommerce_new_customer_username( $username, $email, $new_user_args, $suffix ) {
    return $email;
}
add_filter( 'woocommerce_new_customer_username', 'webinsider_wp_woocommerce_new_customer_username', 10, 4 );

To wystarczy, by WooCommerce podczas tworzenia konta użytkownika (WordPress) jako nazwę użytkownika wstawił cały adres e-mail.

Przynajmniej w teorii, bo może nie jest to rzecz/wiedza powszechna, ale część osób w adresie e-mail używa dodatkowych oznaczeń, pozwalających np. rozpoznać skąd nadawca wiadomości pozyskał nasz adres. Np. jeśli nasz adres e-mail to:

[email protected]

To możemy – o ile nasz dostawca poczty wspiera to rozwązanie – podać adres:

[email protected]

I tu pojawia się pewien problem, bo WordPress w takiej sytuacji w ramach procedury usuwania niedozwolonych znaków z nazwy użytkownika usunie znak plus, a tym samym nazwa użytkownika będzie taka:

[email protected]

A to już całkiem inny adres, i tym samym cały zamysł by nazwa użytkownika była tożsama z adresem e-mail, prysł. Przynajmniej w teorii, bo w WordPressie można wiele, również i to skorygować:

function webinsider_wp_sanitize_username_with_plus_sign( $username, $raw_username, $strict ) {
	$allowed_symbols = "a-z0-9+ _.\-@";
	$username = wp_strip_all_tags ($raw_username);
	$username = remove_accents ($username);
	$username = preg_replace ('|%([a-fA-F0-9][a-fA-F0-9])|', '', $username);
	$username = preg_replace ('/&.+?;/', '', $username);
	$username = preg_replace ('|[^'.$allowed_symbols.']|iu', '', $username);
	$username = trim ($username);
	$username = preg_replace ('|\s+|', ' ', $username);
	return $username;
}
add_filter ( 'sanitize_user', 'webinsider_wp_sanitize_username_with_plus_sign', 10, 3 );

Powyższy kod sprawia, że WordPress dopuści znak plusa w nazwie użytkownika (nawet jeśli nie jest to zbyt powszechna praktyka, to…):

W tym miejscu muszę zaznaczyć, ze powyższy kod – dopuszczający plus w nazwie użytkownika WordPressa – nie jest mojego autorstwa. Wyciągnąłem go ze swoich notatek. A z tego co kojarzę, to pojawił się kiedyś na pewnym nieistniejącym już forum poświęconym m.in. WordPressowi, gdzie właśnie dyskutowaliśmy na ten temat. Wyszukiwarka pokazuje, że obecnie jest dostępny na wielu stronach, więc tym trudniej przypisać mi jego autorstwo do konkretnej osoby. Ważne, że działa… :-)

(!) Zgłoś błąd na stronie | Lub postaw nam kawę :-)
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Wdrożenie Omnibusa w sklepie na WooCommerce (kurs)
Patryk
Wdrożenie Omnibusa w sklepie na WooCommerce (kurs)