Обновить метафайл пользователя wp_login

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

Я думаю, проблема в том, что я не получаю текущую информацию пользователя правильно?

function expire_tier_discount( $user_id ) { 
    update_user_meta( $user_id, 'tier_progress_value', 0);
}
add_action('wp_login', 'expire_tier_discount');

другая попытка:

function expire_tier_discount() { 
    update_user_meta( $user->ID, 'tier_progress_value', 0);
}
add_action('wp_login', 'expire_tier_discount');

другой:

function expire_tier_discount( $user ) { 
    $user = wp_get_current_user();
    update_user_meta( $user->ID, 'tier_progress_value', 0);
}
add_action('wp_login', 'expire_tier_discount');

Всего 1 ответ


Попробуй это:

function expire_tier_discount( $user_login, $user ) { 
    update_user_meta( $user->ID, 'tier_progress_value', 0);
}
add_action('wp_login', 'expire_tier_discount', 10, 2);

Вы не совсем использовали действие wp_login правильно. Действие wp_login переходит в user-login как первый параметр, а фактический пользователь, объект WP_User , в качестве второго аргумента - вы хотите второй аргумент. Кроме того, вам нужно указать, что вы хотите передать 2 параметра при настройке вашего действия.

PS. Некоторым из вас может быть интересно: хорошо, но почему не $user = wp_get_current_user(); Работа? Согласно Wordpress codex , действие wp_login - это самое последнее действие, вызванное функцией wp_signon , и согласно примечанию внутри кода user.php :

wp_signon () не обрабатывает установку текущего пользователя.

Итак, ваше действие вызывалось до того, как был установлен текущий пользователь.


Есть идеи?

10000