(修改后的答案)
代码的问题是密码重置链接/URL缺少正确的密码重置键和用户登录slug—这个$key
(密码重置键)和$user_login
(用户登录slug)如下所示,两者都缺失(即代码中未定义):
network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), \'login\')
因此,要解决问题:
替换此:
if ( $post->post_status == \'publish\' ) {
wp_redirect("" . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), \'login\') . "");
exit();
}
使用此选项:
if ( $post->post_status == \'publish\' ) {
if ( ! $user = get_user_by( \'email\', $_GET[\'email\'] ) ) return;
$key = get_password_reset_key( $user );
wp_redirect("" . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), \'login\') . "");
exit();
}
更换:
// work finished, view the post
wp_redirect("" . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), \'login\') . "");
使用此选项:
// work finished, view the post
$key = get_password_reset_key( $author );
wp_redirect("" . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($author->user_login), \'login\') . "");
请注意
init
hook不会将任何参数传递给回调函数(在您的示例中是
approve_post()
), 因此,您的代码应该是:
add_action( \'init\', \'approve_post\' );
所以
approve_post()
函数应定义为不带任何参数:
function approve_post() // like this
function approve_post($user, $notify) // not this
并钩住
init
只有行动就足够了;所以这是不必要的:
add_action(\'edit_user_created_user\', \'approve_post\', 10, 2 );
这也是不必要的—
at the end 功能(关闭前
}
), 您无需返回任何内容:
return $notify; // just remove this