Visser Labs – Wtyczki WooCommerce

  1. Strona główna
  2. Baza wiedzy
  3. Niestandardowe logowanie dla WooCommerce
  4. Dostępne haki i filtry w Custom Login for WooCommerce

Dostępne haki i filtry w Custom Login for WooCommerce

Chcesz, aby klienci trafiali na konkretną stronę po zalogowaniu, lub potrzebujesz dodać link lub skrypt do strony logowania. Custom Login for WooCommerce zapewnia haki do obu tych celów, dzięki czemu nie musisz edytować plików wtyczki. Posiada również punkt końcowy REST API, który odczytuje i aktualizuje ustawienia wtyczki z kodu.

Ten artykuł obejmuje filtr clwc_login_redirect, akcje clwc_after_login_form i clwc_login_footer oraz punkt końcowy REST API /settings. W krótkiej tabeli wymieniono również trzy mniejsze haki. Konfiguracja samej strony logowania jest opisana w Pierwsze kroki z Custom Login for WooCommerce.

Jest to odniesienie dla deweloperów. Zakłada się, że czujesz się komfortowo z dodawaniem kodu PHP za pomocą niestandardowej wtyczki lub pliku functions.php motywu potomnego. Jeśli haki są dla Ciebie nowe, zacznij od Podręcznika wtyczek WordPress na temat haków.

Wymagania wstępne

WymaganieSzczegóły
WtyczkaCustom Login for WooCommerce w wersji 1.0.3 lub nowszej, zainstalowany i aktywny
WooCommerceWersja 6.0 lub nowsza, zainstalowana i aktywna
DostępSposób dodawania kodu PHP, na przykład niestandardowa wtyczka lub motyw potomny
Dostęp do REST APIKonto z uprawnieniem manage_woocommerce dla punktu końcowego REST API

Jak haki pasują do strony logowania

Wtyczka obsługuje Twoją stronę /login z własnego, samodzielnego szablonu. Ten szablon nie ładuje nagłówka ani stopki Twojego motywu i nie wywołuje wp_head() ani wp_footer(). Dlatego wywołanie zwrotne dodane do wp_head lub wp_footer nigdy nie działa na tej stronie. Zamiast tego użyj poniższych haków wtyczki.

Pamiętaj, że filtr przekierowania działa podczas wysyłania formularza, podczas gdy dwie akcje działają podczas wyświetlania strony logowania.

Filtr: clwc_login_redirect

Ten filtr zmienia miejsce, do którego klient trafia bezpośrednio po pomyślnym zalogowaniu. Nie działa, gdy logowanie się nie powiedzie.

apply_filters( 'clwc_login_redirect', $redirect_to, $user );
ParametrTypOpis
$redirect_tostringAdres URL, na który klient ma zostać wysłany
$userWP_UserKonto, które właśnie się zalogowało

Zwróć adres URL, który chcesz. Początkową wartością $redirect_to jest wartość redirect_to przekazana do strony logowania, na przykład twojsklep.com/login/?redirect_to=.... Jeśli jej nie ma, jest to adres URL strony Moje konto WooCommerce.

Oto, co dzieje się po zwróceniu przez Twoje wywołanie zwrotne:

  1. Następnie działa własny filtr WooCommerce woocommerce_login_redirect. Każde wywołanie zwrotne w tym filtrze widzi Twój wynik i może go ponownie zmienić.
  2. Wtyczka sprawdza ostateczny adres URL. Jeśli wskazuje na inny domenę, której WordPress nie zezwala, wtyczka wysyła klienta na stronę Moje konto.
  3. Wtyczka przekierowuje klienta.

Ponieważ woocommerce_login_redirect działa po clwc_login_redirect, inna wtyczka w tym filtrze może nadpisać Twoje przekierowanie. Jeśli Twoje przekierowanie wydaje się być ignorowane, sprawdź inne wtyczki, które podłączają się do woocommerce_login_redirect.

Przykład: wyślij menedżerów sklepu do panelu

add_filter( 'clwc_login_redirect', function ( $redirect_to, $user ) {
	if ( in_array( 'shop_manager', (array) $user->roles, true ) ) {
		return admin_url();
	}

	return $redirect_to;
}, 10, 2 );

10 to priorytet wywołania zwrotnego, a 2 informuje WordPress, że Twoje wywołanie zwrotne akceptuje dwa parametry. Bez 2 nie otrzymasz $user.

Obie akcje pozwalają na umieszczenie własnego kodu HTML na stronie logowania. Żadna z nich nie przekazuje parametrów, więc Twoje wywołanie zwrotne nie wymaga argumentów. Wyświetl swoją zawartość za pomocą echo.

AkcjaGdzie się uruchamia
clwc_after_login_formBezpośrednio po zamykającym tagu </form>, nadal wewnątrz panelu formularza logowania. Treść pojawia się pod formularzem.
clwc_login_footerPo całym układzie dwupanelowym, blisko końca strony. Treść nie znajduje się w żadnym z paneli.

Przykład: dodaj link pod formularzem logowania

add_action( 'clwc_after_login_form', function () {
	echo '<p><a href="' . esc_url( home_url( '/become-a-customer/' ) ) . '">Need an account? Apply here.</a></p>';
} );

Przykład: dodaj linię tekstu do stopki strony

add_action( 'clwc_login_footer', function () {
	echo '<p style="text-align:center;">Need help? Call us on 1300 000 000.</p>';
} );

clwc_login_footer uruchamia się poza panelem formularza, więc Twój własny CSS decyduje o tym, gdzie pojawi się treść. W przypadku treści należącej do formularza, użyj clwc_after_login_form.

Inne haki na stronie logowania

Te haki są mniejsze i rzadziej używane. Działają tak samo jak powyższe akcje i filtry.

HakTypCo robi
clwc_logout_redirectFiltrZmienia miejsce, do którego klienci są przekierowywani po wylogowaniu. Otrzymuje domyślny adres URL, który wynosi /login/ z dodanym ?logged_out=true, i zwraca żądany adres URL.
clwc_login_headAkcjaUruchamia się wewnątrz tagu <head> strony, po stylach wtyczki. Użyj go do dodania arkusza stylów lub tagu meta.
clwc_login_enqueue_scriptsAkcjaUruchamia się blisko końca strony. Użyj go do dołączenia skryptów dla strony logowania.

Formularz logowania uruchamia również standardowe haki logowania WooCommerce: woocommerce_login_form_start, woocommerce_login_form i woocommerce_login_form_end. Dlatego większość wtyczek CAPTCHA i zabezpieczeń, które działają na formularzu logowania WooCommerce, działa również tutaj.

REST API: punkt końcowy ustawień

Wtyczka posiada jeden punkt końcowy REST API dla swoich ustawień. Pozwala on na odczytanie bieżących ustawień lub ich aktualizację z kodu, na przykład podczas konfigurowania wielu sklepów z jednego skryptu.

/wp-json/clwc/v1/settings
MetodaCo robi
POBIERZZwraca wszystkie ustawienia, a także listę rotation_items
POSTAktualizuje przesłane ustawienia i zwraca wszystkie ustawienia

Kto może z niego korzystać

Obie metody wymagają zalogowanego konta z uprawnieniem manage_woocommerce. Obejmuje to administratorów i menedżerów sklepów. Każdy inny otrzyma odpowiedź 401 lub 403.

Dla żądania z przeglądarki podczas logowania, wyślij nagłówek X-WP-Nonce z nonce wp_rest. Dla żądania spoza WordPress, użyj hasła aplikacji z uwierzytelnianiem podstawowym.

Odczytaj ustawienia

curl -u "admin:APPLICATION_PASSWORD" https://yourstore.com/wp-json/clwc/v1/settings

Odpowiedź jest obiektem JSON. Każde ustawienie, którego jeszcze nie zapisałeś, wraca z wartością domyślną, z wyjątkiem logo_url, które jest pomijane w odpowiedzi, dopóki nie zapiszesz adresu URL logo.

Zaktualizuj ustawienia

Wyślij treść JSON tylko z polami, które chcesz zmienić. Pominięte pola pozostają bez zmian.

curl -X POST -u "admin:APPLICATION_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{"template":"template-2","button_bg":"#e11d48","login_heading":"Welcome back"}' \
  https://yourstore.com/wp-json/clwc/v1/settings

Z poziomu przeglądarki możesz używać wp.apiFetch w ten sam sposób:

wp.apiFetch( {
	path: '/clwc/v1/settings',
	method: 'POST',
	data: { login_button_text: 'Sign in' },
} );

Wtyczka czyści każdą wartość przed jej zapisaniem. Wartość niewłaściwego typu jest pomijana lub zapisywana jako pusta, a żądanie nadal jest realizowane.

PolaAkceptowane wartości i ich obsługa
Pola kolorów: left_panel_bg, left_panel_text, right_panel_bg, right_panel_text, button_bg, button_text, button_hover_bg, link_color, link_hover_color, input_border, input_focus, promo_button_bg, promo_button_text_color, promo_button_hover_bg, promo_button_borderKolor w formacie hex, np. #3b82f6. Wszystko inne jest zapisywane jako puste.
Pola URL: logo_url, promo_button_urlPrawidłowy adres URL. Wtyczka czyści go jako adres URL przed zapisaniem.
szablonJedna z opcji: template-1, template-2, template-3, template-4, template-5. Inne wartości są ignorowane.
promo_enabled, enable_rotationyes lub no. Inne wartości są ignorowane.
mobile_promo_displayhide lub stack. Inne wartości są ignorowane.
Pola tekstowe: login_heading, email_label, password_label, remember_label, login_button_text, lost_password_text, promo_heading, promo_button_textZwykły tekst. Tagi HTML są usuwane.
promo_contentTekst z podstawowymi tagami HTML, takimi jak <br>, <p> i <strong>. Niezabezpieczone tagi HTML są usuwane.
rotation_itemsLista elementów. Każdy element może zawierać heading, content, button_text, button_url i image_url. Wysłanie tego pola zastępuje całą zapisaną listę.

Pola, których nie ma w tabeli, są ignorowane. Ponadto rotation_items zastępuje całą zapisaną listę za każdym razem, gdy ją wysyłasz, więc uwzględnij wszystkie elementy, które chcesz zachować.

Rozwiązywanie problemów

Interfejs API REST zwraca błąd 401 lub 403
Żądanie nie jest zalogowane na konto z uprawnieniem manage_woocommerce. Sprawdź, czy Twoje hasło aplikacji należy do administratora lub kierownika sklepu. W przypadku żądań z przeglądarki sprawdź, czy wysyłasz prawidłowy nagłówek X-WP-Nonce.
Moja funkcja zwrotna clwc_login_redirect działa, ale klienci nadal trafiają na złą stronę
Inna wtyczka w woocommerce_login_redirect zmienia adres URL po Twoim. Sprawdź również, czy adres URL należy do Twojej własnej witryny. Wtyczka wysyła klientów do sekcji Moje konto, gdy ostateczny adres URL wskazuje domenę, której WordPress nie zezwala.
Mój callback na clwc_login_redirect nie otrzymuje $user
Twoje wywołanie add_filter() potrzebuje na końcu 10, 2, aby WordPress przekazał oba parametry do Twojej funkcji.
Kolor wysłany przez REST API został zapisany jako pusty
Wtyczka akceptuje tylko kolory w formacie hex, takie jak #3b82f6 lub #fff. Nazwy kolorów, takie jak red, i wartości, takie jak rgb(0,0,0), są zapisywane jako puste.
Mój kod w wp_head lub wp_footer nie działa na stronie logowania
Strona logowania nie wywołuje tych hooków. Użyj clwc_login_head dla tagu <head> i clwc_login_footer lub clwc_login_enqueue_scripts dla końca strony.

Często zadawane pytania

Czy te hooki działają na standardowym formularzu logowania WooCommerce?
Nie. Działają tylko na własnej stronie logowania wtyczki. Standardowy formularz logowania WooCommerce nadal używa hooków WooCommerce, takich jak woocommerce_login_redirect.
Czy menedżer sklepu może używać punktu końcowego REST API?
Tak. Punkt końcowy sprawdza uprawnienie manage_woocommerce, a menedżerowie sklepów mają je domyślnie.
Czy hooki wymagają aktywnej licencji?
Nie. Hooki i punkt końcowy REST API nie sprawdzają Twojej licencji. Klucz licencyjny służy do aktualizacji wtyczki.
Gdzie mam dodać kod?
Dodaj go do małej niestandardowej wtyczki lub do pliku functions.php swojego motywu potomnego. Nie dodawaj go do plików samej wtyczki, ponieważ aktualizacje wtyczki je nadpisują.

Potrzebujesz pomocy?

Custom Login for WooCommerce to wtyczka premium, więc jeśli potrzebujesz pomocy z konkretną personalizacją, otwórz zgłoszenie wsparcia, a nasz zespół wskaże Ci odpowiedni hook dla Twojego przypadku użycia.

Czy ten artykuł był pomocny?

Powiązane artykuły

Zasoby i pomoc