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);
}
Author: Nikola R., 2014-01-28

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;
 2
Author: Nikola R., 2014-01-28 16:47:13

Я использовал крючки personal_options_update и edit_user_profile_update, но информация базы данных перезаписывалась. Эти крючки работают при редактировании текущего пользователя, но когда администратор редактирует профиль другого пользователя, информация не сохраняется. Я переключился на использование крючка profile_update, и обновления сохранялись при редактировании любого пользователя, так что это, по-видимому, лучший крючок для использования в тех случаях, когда вы хотите редактировать все профили пользователей, а не только текущего пользователя.

 1
Author: Marc Champagne, 2017-08-02 19:12:54

Вы можете использовать третий аргумент add_action для установки приоритета фильтра. Значение функции по умолчанию равно 10, поэтому должно работать что-то >10.

Ссылка: http://codex.wordpress.org/Function_Reference/add_action

 0
Author: Jörn Lund, 2014-01-28 15:58:55

Используя profile_update крюк, я могу решить эту проблему.

 0
Author: Jhony Penagos, 2015-09-17 16:41:19