用户更改个人资料时发送邮件给管理员

时间:2017-11-02 10:20:30

标签: php wordpress email

我正在尝试创建一个功能,当用户更新她/他的个人资料时,管理员会收到邮件通知。不是存储在wp_users中的数据,我想知道存储在wp_usermeta中的更改。实际上有很多使用Ultimate Member创建的metakey。

电子邮件应该只包含更改的值,如果旧的值也会显示,那么最好。

因为我正在使用UltimateMember插件。 根据{{​​3}}网站,我需要这个开始:

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 ); 

经过大量搜索并主要基于this,我提出了这个问题:

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
  • 终极会员版本:1.3.88
  • PHP版本:5.6

更新

我现在做了一个插件,有点工作。我收到一封邮件,我从提供的meta_keys中获取值。现在,我不想在邮件中显示每个meta_value,只显示更改的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 个答案:

答案 0 :(得分:1)

我相信您的问题位于此处:$user = get_user_meta( $user_id, $key, $single);

您传入的某些变量是空的。以下内容应该为您提供正确的用户元:

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

以下是如何从Codex获取用户姓氏的示例:

<?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)将其打印在屏幕上。