WordPress редактирование профиля пользователя обновление обновление второстепенной роли
Я пытаюсь сохранить поле второстепенной роли в user-edit.php который не зависит от основных ролей WP. У меня не было проблем с сохранением других настраиваемых полей, которые уникальны, но для ролей (wp_capabilities), похоже, что сначала сохраняются мои роли (я установил режим сна (10) для проверки базы данных в процессе), а в конце запроса WP сохраняет основное поле роли, которое перезаписывает мою ранее сохраненную роль.
Есть ли способ каким-либо образом упорядочить события, чтобы моя функция выполнялась в самый конец запроса?
Вот что у меня пока есть:
Крючки:
<?php
add_action( 'edit_user_profile', array( $this, 'test_profile_form'));
add_action( 'edit_user_profile_update', array( $this, 'test_save_profile_form' ));
Обратные вызовы:
function hook_save_profile_form($user_id) {
if(!current_user_can("edit_user",$user_id)) {
return false;
}
$user = new WP_User($user_id);
$user->add_role($_POST['secondary-role']);
//debug
sleep(10);
}
4 answers
Я, наконец, нашел решение и правильный хук для этого: profile_update
вызывается в конце wp_insert_user
в user.php
, который вызывается из edit_user
.
Окончание Wp_insert_user:
if ( $update )
do_action('profile_update', $user_id, $old_user_data);
else
do_action('user_register', $user_id);
return $user_id;
Я использовал крючки personal_options_update
и edit_user_profile_update
, но информация базы данных перезаписывалась. Эти крючки работают при редактировании текущего пользователя, но когда администратор редактирует профиль другого пользователя, информация не сохраняется. Я переключился на использование крючка profile_update
, и обновления сохранялись при редактировании любого пользователя, так что это, по-видимому, лучший крючок для использования в тех случаях, когда вы хотите редактировать все профили пользователей, а не только текущего пользователя.
Вы можете использовать третий аргумент add_action
для установки приоритета фильтра. Значение функции по умолчанию равно 10, поэтому должно работать что-то >10.
Ссылка: http://codex.wordpress.org/Function_Reference/add_action
Используя profile_update
крюк, я могу решить эту проблему.