我找到了这段代码,正在测试它,但它不起作用。
我如何解决它?
add_action( \'validate_password_reset\', \'rsm_redirect_after_rest\', 10, 2 );
function rsm_redirect_after_rest($errors, $user) {
if ( ( ! $errors->get_error_code() ) && isset( $_POST[\'pass1\'] ) && !empty( $_POST[\'pass1\'] ) ) {
reset_password( $user, $_POST[\'pass1\'] );
setcookie( $rp_cookie, \' \', time() - YEAR_IN_SECONDS, $rp_path, COOKIE_DOMAIN, is_ssl(), true );
wp_set_current_user( $user->ID );
wp_set_auth_cookie( $user->ID );
do_action( \'wp_login\', $user->user_login );//`[Codex Ref.][1]
wp_redirect( home_url() );
exit;
}
}
这是我得到的错误:
警告:Cookie名称不能为空
感谢那些帮助我的人。
RESOLVED:
我按照您的建议使用了以下代码,现在它可以完美地工作:
add_action( \'validate_password_reset\', \'rsm_redirect_after_rest\', 10, 2 );
function rsm_redirect_after_rest($errors, $user) {
global $rp_cookie, $rp_path;
if ( ( ! $errors->get_error_code() ) && isset( $_POST[\'pass1\'] ) && !empty( $_POST[\'pass1\'] ) ) {
reset_password( $user, $_POST[\'pass1\'] );
setcookie( $rp_cookie, \' \', time() - YEAR_IN_SECONDS, $rp_path, COOKIE_DOMAIN, is_ssl(), true );
wp_set_current_user( $user->ID );
wp_set_auth_cookie( $user->ID );
do_action( \'wp_login\', $user->user_login );//`[Codex Ref.][1]
wp_redirect( home_url() );
exit;
}
}
最合适的回答,由SO网友:Ted Stresen-Reuter 整理而成
$rp_cookie 和$rp_path 在函数内,但未在函数内初始化,因此它们超出范围,因此为空。你可以试着打电话global $rp_cookie, $rp_path; 但我不知道这些变量在函数运行时是否已设置,因此它们可能仍然为空。
另一种更“现代”的方法是通过修改函数签名将变量添加到函数范围中:
add_action( \'validate_password_reset\',
function rsm_redirect_after_rest($errors, $user) use ($rp_cookie, $rp_path) {
if ( ( ! $errors->get_error_code() ) && isset( $_POST[\'pass1\'] ) && !empty( $_POST[\'pass1\'] ) ) {
reset_password( $user, $_POST[\'pass1\'] );
setcookie( $rp_cookie, \' \', time() - YEAR_IN_SECONDS, $rp_path, COOKIE_DOMAIN, is_ssl(), true );
wp_set_current_user( $user->ID );
wp_set_auth_cookie( $user->ID );
do_action( \'wp_login\', $user->user_login );//`[Codex Ref.][1]
wp_redirect( home_url() );
exit;
}
}, 10, 2 )
请注意
use ($rp_cookie, $rp_path) 在匿名函数之后,如果在运行此函数之前未设置这些变量,则它们仍然为空。HTH。