Уведомление о новом пользователе в WordPress: wp_new_user_notification()

WP_NEW_USER_NOTIFICATION() │ WP 2.0.0

Функция wp_new_user_notification() отправляет уведомление по электронной почте администратору сайта о новой регистрации пользователя и отправляет пользователю письмо с логином и паролем.

Эта функция автоматически вызывается другой функцией wp_send_new_user_notifications(), которая подключена к хуку register_new_user в WordPress:

add_action('register_new_user', 'wp_send_new_user_notifications' );

Замечания

  • Переопределяемая функция — данную функцию можно заменить с помощью плагина. Это значит, что функция будет работать только после загрузки всех плагинов, и до этого момента она не будет определена. Поэтому вы не можете вызывать эту и все функции, зависящие от нее, напрямую из кода плагина. Их нужно вызывать на хуке plugins_loaded или позже, например, на хуке init.

  • Чтобы заменить (переопределить) функцию, вы можете создать функцию с тем же именем в вашем плагине, и она заменит оригинал.

Использует: wp_mail() (функция для отправки электронной почты)
Используется: wp_send_new_user_notifications()

Хуки из функции

  • wp_send_new_user_notification_to_admin
  • wp_new_user_notification_email_admin
  • wp_send_new_user_notification_to_user
  • wp_new_user_notification_email

Возврат

Функция ничего не возвращает (null).

Использование

wp_new_user_notification( $user_id, $deprecated, $notify );

Параметры:

  • $user_id (int) (обязательный) — ID пользователя.
  • $deprecated (null) — не используется (аргумент устарел).
  • $notify (string) — тип уведомления, который должен произойти. Принимает значения 'admin', пустую строку (только администратор), 'user' или 'both' (администратор и пользователь).
    По умолчанию: ''

Примеры

Пример 1: Уведомление администратора и пользователя

Предположим, вы хотите уведомлять себя (вы администратор) и отправить электронное письмо новому пользователю с ссылкой для установки нового пароля:

$new_user_id = 8;

wp_new_user_notification( $new_user_id, 'both' );

В результате администратор получит электронное письмо:

Новая регистрация пользователя на вашем сайте
Пример:

Имя пользователя: user

Email: user@example.com

Пользователь получит следующее сообщение:

Имя пользователя: user

Чтобы установить ваш пароль, посетите следующий адрес:

http://example.com/wp-login.php?action=rp&key=1ORsgCiUtZdwDw3tss4U&login=user

Изменения

  • С 2.0.0 — Функция была введена.
  • С 4.3.0 — Параметр $plaintext_pass был изменен на $notify.
  • С 4.3.1 — Параметр $plaintext_pass устарел. $notify добавлен в качестве третьего параметра.
  • С 4.6.0 — Параметр $notify принимает значение 'user' для отправки уведомления только созданному пользователю.

Код функции

function wp_new_user_notification( $user_id, $deprecated = null, $notify = '' ) {
    if ( null !== $deprecated ) {
        _deprecated_argument( __FUNCTION__, '4.3.1' );
    }

    if ( ! in_array( $notify, array( 'user', 'admin', 'both', '' ), true ) ) {
        return;
    }

    $user = get_userdata( $user_id );

    $blogname = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );

    $send_notification_to_admin = apply_filters( 'wp_send_new_user_notification_to_admin', true, $user );

    if ( 'user' !== $notify && true === $send_notification_to_admin ) {
        $admin_user = get_user_by( 'email', get_option( 'admin_email' ) );

        if ( $admin_user ) {
            $switched_locale = switch_to_user_locale( $admin_user->ID );
        } else {
            $switched_locale = switch_to_locale( get_locale() );
        }

        $message = sprintf( __( 'Новая регистрация пользователя на вашем сайте %s:' ), $blogname ) . "rnrn";
        $message .= sprintf( __( 'Имя пользователя: %s' ), $user->user_login ) . "rnrn";
        $message .= sprintf( __( 'Email: %s' ), $user->user_email ) . "rn";

        $wp_new_user_notification_email_admin = array(
            'to'      => get_option( 'admin_email' ),
            'subject' => __( '[%s] Новая регистрация пользователя' ),
            'message' => $message,
            'headers' => '',
        );

        wp_mail(
            $wp_new_user_notification_email_admin['to'],
            wp_specialchars_decode( sprintf( $wp_new_user_notification_email_admin['subject'], $blogname ) ),
            $wp_new_user_notification_email_admin['message'],
            $wp_new_user_notification_email_admin['headers']
        );

        if ( $switched_locale ) {
            restore_previous_locale();
        }
    }

    $send_notification_to_user = apply_filters( 'wp_send_new_user_notification_to_user', true, $user );

    if ( 'admin' === $notify || true !== $send_notification_to_user || ( empty( $deprecated ) && empty( $notify ) ) ) {
        return;
    }

    $key = get_password_reset_key( $user );
    if ( is_wp_error( $key ) ) {
        return;
    }

    $switched_locale = switch_to_user_locale( $user_id );

    $message  = sprintf( __( 'Имя пользователя: %s' ), $user->user_login ) . "rnrn";
    $message .= __( 'Чтобы установить ваш пароль, посетите следующий адрес:' ) . "rnrn";
    $message .= network_site_url( 'wp-login.php?login=' . rawurlencode( $user->user_login ) . "&key=$key&action=rp", 'login' ) . "rnrn";
    $message .= wp_login_url() . "rn";

    $wp_new_user_notification_email = array(
        'to'      => $user->user_email,
        'subject' => __( '[%s] Данные для входа' ),
        'message' => $message,
        'headers' => '',
    );

    wp_mail(
        $wp_new_user_notification_email['to'],
        wp_specialchars_decode( sprintf( $wp_new_user_notification_email['subject'], $blogname ) ),
        $wp_new_user_notification_email['message'],
        $wp_new_user_notification_email['headers']
    );

    if ( $switched_locale ) {
        restore_previous_locale();
    }
}

Связанные функции

  • Регистрация (вход для пользователей)

    • register_new_user()
    • wp_get_session_token()
    • wp_lostpassword_url()
  • Добавление/Удаление пользователя

    • wp_create_user()
    • wp_delete_user()
    • wp_insert_user()
    • wp_update_user()

Теперь вы знаете, как использовать функцию wp_new_user_notification(), чтобы уведомлять о новых пользователях на вашем сайте. Это важно для управления вашими пользователями и обеспечения безопасности вашего сайта.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *