这肯定是一个非常简单的问题,但是我为此感到困惑,我试图使用此功能要做的就是在用户登录后将自定义字段更新为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');
答案 0 :(得分:4)
尝试一下:
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操作将用户登录名作为第一个参数传递,而实际用户WP_User对象作为第二个参数传递-您需要第二个参数。另外,您需要指定在设置操作时要传递2个参数。
PS。你们中的有些人可能会纳闷:好的,但是$user = wp_get_current_user();
为什么不起作用?根据{{3}},wp_login
操作是wp_signon
函数中触发的最后一个操作,并且根据Wordpress codex代码中的注释:
wp_signon()无法处理当前用户的设置。
因此,您的操作在设置当前用户之前被调用。