Problem przy rejestracji przez użytkowników

Dział dotyczący opisu sprawdzonych rozwiązań. Znajdziesz tutaj m. in. tutoriale Wordpress.
no avatar
Krzysztof Milewski
 
Posty: 2
Reputacja: 0 pkt
Od: 7 mar 2016, o 13:14

Problem przy rejestracji przez użytkowników

przez Krzysztof Milewski » 7 mar 2016, o 13:36

Niektóre systemy poczty elektronicznej pokazują źle email od rejestracji (np. poczta.o2.pl). Przychodzi taki komunikat:
Kod: Zaznacz cały
Nazwa użytkownika: krysek
Aby ustawić hasło, przejdź na stronę:
<http://wpportale.pl/wp-login.php?action=rp&key=xxx&login=xxx>;
http://wpportale.pl/wp-login.php

Link do kliknięcia wygląda następująco:
Kod: Zaznacz cały
http://new-song-online.com/wp-login.php?action=rp&key=xxx&login=xxx>

Czyli na końcu jest >
Po kliknięciu na link jest komunikat:
Proszę wprowadzić swoją nazwę użytkownika lub adres email. Odnośnik pozwalający na utworzenie nowego hasła zostanie wysłany emailem.
Odnośnik do resetowania hasła wydaje się być niesprawny. Proszę zawnioskować o nowy odnośnik poniżej.

Ktoś informował na polskim forum wordpress.org o tym ale żadnej odpowiedzi nie było.
Ja dziś napisałem na angielskim forum wordpress.org/support ale się nie ukazało , może temu, że jestem z Polski.
Mógłby ktoś kto mieszka za granicą dać to na forum angielskie albo gdzieś to zgłosić
Kod: Zaznacz cały
Some email systems wrong show registration e-mail. Comes a message:
Username: sdeje
To set your password, visit the following address:
<http://new-song-online.com/wp-login.php?action=rp&key=xxx&login=xxx>;
http://new-song-online.com/wp-login.php
Link to click looks as follows:
http://new-song-online.com/wp-login.php?action=rp&key=xxx&login=xxx>
So at the end is >
After clicking on the link is the message:
<blockquote>Please enter your username or email address. You will receive a link to create a new password via email.
Your password reset link appears to be invalid. Please request a new link below.</blockquote>
You would have to remove Wordpress < and >


Aktualizacja: teraz widzę że jednak ukazał się mój post na angielskim forum tylko że w miejsce numeru i loginu z linku dali krzyżyki.
Ale i tak jak ktoś ma dojście do twórców wordpressa niech to zgłosi.

no avatar
mydełkoFa
 
Posty: 1
Reputacja: 1 pkt
Od: 6 lut 2018, o 12:48

Re: Problem przy rejestracji przez użytkowników

przez mydełkoFa » 6 lut 2018, o 13:52

Do tej pory i mnie by to nie dotyczyło, gdyby nie fakt, że dla sprawdzenia systemu chciałem się zarejestrować na swojej witrynie.

Krzysztof Milewski napisał(a):Niektóre systemy poczty elektronicznej pokazują źle email od rejestracji (np. poczta.o2.pl).


To nie wina systemu pocztowego, lecz źle utworzonego odnośnika.

Jeżeli wiadomość jest wysyłana jako
Kod: Zaznacz cały
text/plain
a tak właśnie jest w przypadku resetowania hasła jak i wiadomości po rejestracji, adres url nie powinien zawierać żadnych dodatków w postaci ostrych nawiasów:
Kod: Zaznacz cały
< >

Niby po co je ktoś tam umieścił?

Z początku sam myślałem, że ktoś chciał zrobić z tego znacznik html i źle go zamknął. Ale jak zobaczyłem nagłówek wiadomości, od razu skojarzyłem.
Słusznie zauważyłeś, że nie powinien być on opakowany z ostre nawiasy.
Powinien być to czysty link, z protokołem, a twoja poczta już go sobie sama podświetli.

Jak widać po dacie twojego wpisu, minął rok a ten błąd nadal siedzie w kodzie źródłowym.

Żeby go znaleźć, najpierw musiałem znaleźć tłumaczenia WP i poszukać, gdzie jest jego odpowiednik w kodzie.
Szybko dotarłem do tego miejsca:

[url]https://core.trac.wordpress.org/browser/branches/4.8/src/wp-login.php?marks=332#L331
[/url]

Linia 332.

Szybkim. połowicznym rozwiązaniem, może być poprawienie kodu, w pliku
Kod: Zaznacz cały
wp-login.php
.
Ale, jak wiadomo, kodu źródłowego się nie edytuje, bo po aktualizacji utracimy te zmiany.

Co zatem można zrobić?

Na szczęście do zmiennej
Kod: Zaznacz cały
$message
jest zaaplikowany filtr, dzięki któremu można tę wiadomość przefiltrować czyli zrobić własną.

Kod: Zaznacz cały
   $message = apply_filters( 'retrieve_password_message', $message, $key, $user_login, $user_data );


Funkcja wyjściowa może wyglądać tak:

Kod: Zaznacz cały
// define the retrieve_password_message callback
function filter_retrieve_password_message( $message, $key, $user_login, $user_data ) {
    // make filter magic happen here...
    return $message;
};
         
// add the filter
add_filter( 'retrieve_password_message', 'filter_retrieve_password_message', 10, 4 );


Żeby to działało, wystarczy że z funkcji
Kod: Zaznacz cały
retrieve_password()
, skopiujesz zmienną
Kod: Zaznacz cały
$message
, czyli to co tworzy szkielet/body wiadomości,
ALE..
z poprawionym linkiem.

Kod: Zaznacz cały
// define the retrieve_password_message callback
function filter_retrieve_password_message( $message, $key, $user_login, $user_data ) {
   
   $message = __( 'Someone has requested a password reset for the following account:' ) . "\r\n\r\n";
   /* translators: %s: site name */
   $message .= sprintf( __( 'Site Name: %s'), $site_name ) . "\r\n\r\n";
   /* translators: %s: user login */
   $message .= sprintf( __( 'Username: %s'), $user_login ) . "\r\n\r\n";
   $message .= __( 'If this was a mistake, just ignore this email and nothing will happen.' ) . "\r\n\r\n";
   $message .= __( 'To reset your password, visit the following address:' ) . "\r\n\r\n";
   $message .= network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user_login ), 'login' );
   $message .= "\r\n";
    return $message;
};
         
// add the filter
add_filter( 'retrieve_password_message', 'filter_retrieve_password_message', 10, 4 );


I to wszystko.

Ale.. niestety w przypadku powiadomień wysyłanych do nowo zarejestrowanych użytkowników, już nie jest tak kolorowo, bo, nie rozumieć dlaczego - żadnego filtra do tego nie ma. :(

A, żeby ktoś z ekipy WordPressa dostrzegł bład, należy utworzyć ticket (bilet).

P.s. Poprawka.
Dla powiadomień dla nowo zarejestrowanych użytkowników, jest zaczep filtra:
Kod: Zaznacz cały
wp_new_user_notification_email
:

Nie zauwarzłyłem go, bo przeglądałem wersję 4.8, a zaczep jest od v. 4.9.
https://developer.wordpress.org/reference/hooks/wp_new_user_notification_email/

Rozwiązaniem też może być też skopiowania całej funkcji
Kod: Zaznacz cały
wp_new_user_notification()
, z pliku
Kod: Zaznacz cały
pluggable.php
i utworzenie wtyczki w katalogu mu-plugins. Wtedy będzie można zmodyfikować jej kod, bez obawy utraty modyfikacji podczas aktualizacji.
admin lubi ten wpis.




  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Baza wiedzy Wordpress

Kto przegląda forum Wordpress

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość