Отправить письмо администратору, когда пользователь меняет профиль

Я пытаюсь создать функцию, которая, когда пользователь обновляет свой профиль, администратор получит уведомление по электронной почте. Не данные, хранящиеся в wp_users, я хотел бы знать изменения, хранящиеся в wp_usermeta. На самом деле довольно много метакей, созданных с помощью Ultimate Member.

E-Mail должен содержать только измененное значение, и лучше всего было бы, если бы было также показано старое значение.

Как я использую UltimateMember плагин.
В соответствии с этот сайт, мне нужно это, чтобы начать:

function action_um_after_user_account_updated( $get_current_user_id ) {
// make action magic happen here...
};
add_action( 'um_after_user_account_updated', 'action_um_after_user_account_updated', 10, 1 );

После долгих поисков и в основном на основе этот я придумал это:

function action_um_after_user_account_updated( $get_current_user_id, $prev_value) {
$key = 'name';
$user = get_user_meta( $user_id, $key, $single);
$single = true;
if($prev_value->$key != $user->$key) {
$admin_email = "admin@site.com";
$message .= sprintf( __( 'New Name is: %s' ), $user ). "\r\n\r\n";
$message .= sprintf( __( 'Old name was: %s' ), $prev_value ). "\r\n\r\n";
wp_mail( $admin_email, sprintf( __( '[DB] Name changed' ) ),$message );
}

};

// add the action
add_action( 'um_after_user_account_updated', 'action_um_after_user_account_updated', 10, 1 );

Ну, это не работает вообще. Я не знаю, если у меня есть проблема с кодом php, или если код, возможно, устарел, но я не могу заставить его работать.

Я также включил pluggable.php, который мне нужно использовать wp_mail, насколько я знаю. (include ABSPATH . WPINC . '/pluggable.php';) в заголовочном файле моей темы (smartpress).

  • WordPress-версия: 4.8.2
  • Ultimate Member версия: 1.3.88
  • Версия PHP: 5.6

ОБНОВИТЬ:

Вместо этого я сделал плагин, который работает. Я получаю почту и получаю значения из предоставленных meta_keys. Теперь я не хочу показывать каждое значение meta_value в почте, только те, которые изменились. Есть ли способ сохранить предыдущие значения, непосредственно перед обновлением профиля и сравнением с ним или чем-то?

Вот мой текущий код:

function profile_update_name() {
$user_id = get_current_user_id();
$single = true;
$user_fnm = get_user_meta( $user_id, 'firstnamemother', $single);
$user_lnm = get_user_meta( $user_id, 'nachnamemother', $single);
$admin_email = "admin@site.com";
$message .= sprintf( __( $user_fnm .' '. $user_lnm . ' has updated the profile.')). "\r\n\r\n";
$message .= sprintf( __( 'New Name is: %s' ), $user_fnm .' '. $user_lnm ). "\r\n\r\n";
$message .= sprintf( __( 'Old name was: %s' ), $user_lnm ). "\r\n\r\n";
wp_mail( $admin_email, sprintf( __( '[DB] Name changed' ) ),$message );
};
// add the action
add_action( 'um_user_after_updating_profile', 'profile_update_name', 1, 10 );

1

Решение

Я считаю, что ваша проблема находится здесь: $user = get_user_meta( $user_id, $key, $single);

Некоторые переменные, которые вы передаете, пусты. Следующее должно дать вам правильную мета пользователя:

$user = get_user_meta( $get_current_user_id, $key, true);

Вот пример того, как вы можете получить фамилию пользователя из кодекс:

<?php
$user_id = 9;
$key = 'last_name';
$single = true;
$user_last = get_user_meta( $user_id, $key, $single );
echo '<p>The '. $key . ' value for user id ' . $user_id . ' is: ' . $user_last . '</p>';
?>

Вам следует var_dump() $user переменная, чтобы увидеть, как он возвращает значения.

РЕДАКТИРОВАТЬ:

Как только ваш вопрос обновился, второй параметр функции get_user_meta() это мета ключ. В этом случае мета-ключ — это часть пользователя, которую вы хотите получить. Например, имя или фамилия. Измените следующее в вашем коде:

<?php
$user_fnm = get_user_meta( $user_id, 'name'/*I am 90% sure this one is right*/, $single);
$user_lnm = get_user_meta( $user_id, 'last_name', $single);
?>

Это должно получить желаемый результат. Все, что вам нужно сделать сейчас, это echo или использовать __($yourvar) распечатать его на экране.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector