Buddypress отправляет администратору уведомление по электронной почте для нескольких полей xprofile, когда пользователь обновляет - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь создать функцию, которая будет отправлять уведомление по электронной почте администратору, когда пользователь обновляет только указанные c поля профиля (например, поля с ID 8,9,10). Меня не волнует, что обновленное значение будет отправлено по электронной почте. Я просто хочу получить уведомление, что одно из указанных полей c было обновлено.

Я сделал что-то вроде этого

add_action('xprofile_profile_field_data_updated', 'checkField', 10, 2);

function checkField($field_id, $value) {
// Getting current logged in user's info
$current_user = wp_get_current_user();
// Checking the hidden value and if it has any value
if($field_id == 8 && $value != '')
    // Sending email
    wp_mail( 'YOUR_EMAIL_ADDRESS ', 'Phone no is changed', $current_user->user_login . ' has changed his phone number ');

if($field_id == 9 && $value != '')
    // Sending email
    wp_mail( 'YOUR_EMAIL_ADDRESS ', 'Address is changed', $current_user->user_login . ' has changed his address ');

if($field_id == 10 && $value != '')
    // Sending email
    wp_mail( 'YOUR_EMAIL_ADDRESS ', 'Email is changed', $current_user->user_login . ' has changed his email ');
  }

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

Любая помощь будет принята.

1 Ответ

0 голосов
/ 07 июня 2020

Итак, у меня это работает. Если кто-то ищет что-то похожее, вот оно:

function buddypress_profile_update( $user_id, $posted_field_ids, $errors,$old_values, $new_values ) { 
$admin_email = "admin@admin.com";

if ($old_values[4]['value'] !== $new_values[4]['value']) {
 $message = sprintf( __( 'There was a change in the profile of the member:     <strong>%1$s</strong>', 'buddypress' ), bp_core_get_user_displayname( $user_id ) ) . "\r\n\r\n"; 
 $message .= sprintf( __( '<p>The field <strong>Phone</strong> was <br /><hr><br /> %s <br /><hr><br />and now it is:<br /><hr><br /> <strong> %s </strong><hr></p>' ), $old_values[4]['value'], $new_values[4]['value'] ). "\r\n\r\n";
  wp_mail( $admin_email, sprintf( __( 'Change in members Profile' ), get_option('blogname') ), $message    );
 }

  if ($old_values[5]['value'] !== $new_values[5]['value']) {
enter code here
 wp_mail(.......
  }

add_action( 'xprofile_updated_profile', 'buddypress_profile_update', 10, 5 ); 

если у вас есть флажок в качестве поля, вы можете использовать json_encode для этого, чтобы получить свои данные.

Для пример

$message .= sprintf( __( '<p>The field <strong>Checkbox</strong> was <br /><hr><br /> %s <br /><hr><br />and now it is:<br /><hr><br /> <strong> %s </strong><hr></p>' ), json_encode($old_values[5]['value']), json_encode($new_values[5]['value']) ). "\r\n\r\n";

Не забудьте указать ID полей в каждом if внутри [ID]

...