在wp_login上更新用户元

时间:2018-10-15 17:34:16

标签: wordpress login custom-fields

这肯定是一个非常简单的问题,但是我为此感到困惑,我试图使用此功能要做的就是在用户登录后将自定义字段更新为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 个答案:

答案 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()无法处理当前用户的设置。

因此,您的操作在设置当前用户之前被调用。