Intereting Posts

Как отличить пользовательскую регистрацию пользователя hook_update, пользовательский пароль для сброса пароля или профиль пользователя?

Крюк

profile_update 

увольняется, если пользователь обновляет свой профиль, то есть также когда он сбрасывает первый пароль после регистрации и регистрации.

Как я могу различать три случая?

РЕДАКТИРОВАТЬ: Есть, по крайней мере, 3 случая, чтобы отличить, в котором называется этот крючок.

  1. первый шаг регистрации пользователя
    • Пользователь заполняет электронную почту и имя пользователя и сохраняет (здесь вызывается профиль_update), на котором представлен запрос на проверку электронной почты для процесса проверки
  2. пароль пользователя после регистрации
    • Пользователь проверяет почту, выполняет предложенный URL-адрес, сбрасывает пароль и сохраняет (здесь вызывается профиль_update)
  3. пользователь обновляет свой профиль
    • Пользователь регистрируется и обновляет некоторые данные в своем профиле и сохраняет (здесь вызывается профиль_update)

Я думаю, что можно отличить случай 3, проверяя, кто-то, кто его в настоящее время вошел в систему

 is_user_logged_in() 

Тем не менее проблема состоит в том, чтобы отличить случай 2 от 1. Как указывает s_ha_dum, есть возможность проверить user_activation_key. Если ключ создается не в момент времени 1, а в момент времени 2, то 3 случая различимы. (Даже если я лично считаю, что крючок покрывает слишком много случаев и не должен).

Solutions Collecting From Web of "Как отличить пользовательскую регистрацию пользователя hook_update, пользовательский пароль для сброса пароля или профиль пользователя?"

Технически вы не можете. Этот фильтр не передает никаких данных, которые специально позволят вам различать эти два случая.

 2086 /** 2087 * Fires immediately after an existing user is updated. 2088 * 2089 * @since 2.0.0 2090 * 2091 * @param int $user_id User ID. 2092 * @param object $old_user_data Object containing user's data prior to update. 2093 */ 2094 do_action( 'profile_update', $user_id, $old_user_data ); 

Вы заметили, что фильтр проходит через $old_user_data поэтому вы можете проверить user_activation_key в таблице *_users . Тем не менее, я думаю, что это поле заполняется, когда пользователь сбрасывает пароль, а не только при создании учетной записи.

Чтобы быть абсолютно уверенным, вам, вероятно, нужно будет установить значение метаданных пользователя при первом входе в систему, а затем проверить, что для последующих логинов.

Для того, чтобы различать случаи 1 и 3, я фактически использовал:

 add_action( 'profile_update', 'when_profile_update', 10, 2 ); function when_profile_update( $user_id, $old_user_data ) { if (is_user_logged_in()) { // Updating profile info when logged in }else{ if (empty($old_user_data->user_activation_key)) { // Registering } } } 

В настоящее время на моем сайте profile_update не запускается сброс пароля, поэтому случай 2 не выполняется.