Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klucz aktywacji konta nowego usera
Forum PHP.pl > Forum > PHP
skabszo
Witajcie,

Próbowałem edytować nieco plugin wordpressowy Theme my login ( dla zainteresowanych link do ww. http://wordpress.org/extend/plugins/theme-my-login/).

Chodzi oto, że mamy do wyboru następujące sposoby aktywacji nowych userów - automatyczna aktywacja konta, kliknięcie w link przez usera, aktywacja przez admina (należy się zalogować i zatwierdzić konto poprzez zmianę roli/statusu nowego usera).

Zależy mi by tak naprawdę połączyć dwa ostatnie tj. nadal za aktywację konta odpowiada admin, ale to admin otrzymuje link w który trzeba kliknąć - czyli po prostu bez potrzeby logowania klikamy i aktywujemy konto.

Odnalazłem plik odpowiedzialny za aktywację: http://wklejto.pl/119680

Wydawało mi się, że wystarczy edytować fragment:
  1. function moderate_user( $user_id, $user_pass ) {
  2. global $wpdb;
  3.  
  4. // Set user role to "pending"
  5. $user = new WP_User( $user_id );
  6. $user->set_role( 'pending' );
  7.  
  8. // Temporarily save plaintext pass
  9. if ( isset( $_POST['user_pass'] ) )
  10. update_user_meta( $user_id, 'user_pass', $_POST['user_pass'] );
  11.  
  12. // Send appropriate e-mail depending on moderation type
  13. if ( 'email' == $GLOBALS['theme_my_login']->options->get_option( array( 'moderation', 'type' ) ) ) { // User activation
  14. // Generate an activation key
  15. $key = wp_generate_password( 20, false );
  16. // Set the activation key for the user
  17. $wpdb->update( $wpdb->users, array( 'user_activation_key' => $key ), array( 'user_login' => $user->user_login ) );
  18. // Send activation e-mail
  19. $this->new_user_activation_notification( $user_id, $key );
  20. } elseif ( 'admin' == $GLOBALS['theme_my_login']->options->get_option( array( 'moderation', 'type' ) ) ) { // Admin approval
  21. // Send approval e-mail
  22. $this->new_user_approval_admin_notification( $user_id );
  23. }
  24. }
tylko kurcze nie bardzo teraz wiem co zrobić. Macie jakiś pomysł gdzie dokonać zmiany? próbowałem edytować linijkę $this->new_user_approval_admin_notification( $user_id ); ale bez skutku.. mail dalej dochodzi z linkiem do logowania się admina.;/
Uriziel01
Najprościej będzie tak.
Zrób sobie nową metodę gdyż zazwyczaj nie warto palić za Sobą mostów (nigdy nie wieszy czy tamta metoda Ci się kiedyś nie przyda.
następnie w tej metodzie połącz zawartość metod: new_user_activation_notification oraz new_user_approval_admin_notification, na przykład tak:
  1. $user = new WP_User( $user_id );
  2.  
  3. $user_login = stripslashes( $user->user_login );
  4. $user_email = stripslashes( $user->user_email );
  5.  
  6. if ( function_exists( 'is_multisite' ) && is_multisite() ) {
  7. $blogname = $GLOBALS['current_site']->site_name;
  8. } else {
  9. // The blogname option is escaped with esc_html on the way into the database in sanitize_option
  10. // we want to reverse this for the plain text arena of emails.
  11. $blogname = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
  12. }
  13.  
  14. $title = sprintf( __( '[%s] New User Awaiting Approval', 'theme-my-login' ), $blogname );
  15. $activation_url = add_query_arg( array( 'action' => 'activate', 'key' => $key, 'login' => rawurlencode( $user_login ) ), wp_login_url() );
  16.  
  17. $message = sprintf( __( 'Thanks for registering at %s! To complete the activation of user account please click the following link: ', 'theme-my-login' ), $blogname ) . "\r\n\r\n";
  18. $message .= $activation_url . "\r\n";
  19.  
  20. $title = apply_filters( 'user_approval_admin_notification_title', $title, $user_id );
  21. $message = apply_filters( 'user_approval_admin_notification_message', $message, $user_id );
  22.  
  23. $to = apply_filters( 'user_approval_admin_notifcation_mail_to', get_option( 'admin_email' ) );
  24.  
  25. @wp_mail( $to, $title, $message );


Od razu mówię że nie mam pojęcia czy to działa gdyż nie mam teraz nigdzie WP aby to sprawdzać, kod pisany na kolanie i przedstawia tylko koncept.
skabszo
tak się zastanawiam, gdzie może tkwić problem jeżeli nawet w przypadku, w którym mail dochodzi, są dane i link z kluczem ale wejście w link nic nie daje tzn nie aktywuje to konta..
Uriziel01
No ja bez bicia mogę się przyznać że miałem bardzo mało wspólnego z WP (trzeba by te braki nadrobić ale zawsze jest coś bardziej pilnego) i nie bardzo mogę ci jakoś pomóc, możesz ewentualnie pokusić się o znalezienie w bazie tabeli użytkowników i wyszukanie kolumny z tym kluczem aktywacyjnym, możesz wtedy sprawdzić czy klucze są zgodne.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.