headers 在自定义插件中使用 wp_signon() 函数时已发送错误
headers already sent error when using wp_signon() function in custom plugin
我正在尝试构建一个带有显示登录表单的短代码的插件,该表单应该用于登录。一切似乎都很好,但是当我尝试使用此表单登录时,它给了我这个错误
警告:无法修改 header 信息 - headers 已经发送(输出开始于 /home/wise/hanan.tk/wp-content/themes/hello-elementor-child/header.php:13)
我正在使用 wp_signon 功能进行登录
这是我的登录代码:
add_shortcode('instagram-login','display_login_form');
function display_login_form(){
global $wpdb;
if(isset($_POST['login-submit']) ){
$uerror = 0;
$perror = 0;
$username = $wpdb->escape($_POST['log']);
$password = $wpdb->escape($_POST['pwd']);
$user_data = array();
$user_data['user_login'] = $username;
$user_data['user_password'] = $password;
$verify_user = wp_signon( $user_data, true );
if (is_wp_error($verify_user) ) {
if (strpos($verify_user->get_error_message(), 'registered') !== FALSE) {
$uerror = 1;
}
else {
$perror = 1;
}
$login_error = '<div class="error">'.$verify_user->get_error_message().'</div>';
} else {
wp_set_auth_cookie( $verify_user->ID );
wp_redirect(get_option( 'instagram_register_login_redirect' ));
exit(1);
}
}
$form = '';
$form .= '<div class="col-md-5" style="margin:0 auto;">
<form name="loginform" id="insta_loginform" action="" method="post">
<div class="form-group">
<label for="username"><span class="mr-1"><img src="http://hanan.tk/wp-content/uploads/2022/01/at.png"></span>Email Address</label>';
$form .= '<input type="text" required class="form-control';
?>
<?php if($uerror == 1) $form .= 'error'; ?><?php $form .='" name="log" id="user_login" placeholder="Email Address">';?>
<?php if (isset($login_error) && $uerror == 1) {
$form .= $login_error;
}
$form .='
</div>
<div class="form-group">
<label for="password"><span class="mr-1"><img src="http://hanan.tk/wp-content/uploads/2022/01/padlock.png"></span>Password</label>';
$form .=' <input type="password" required class="form-control'; ?>
<?php if($perror) $form .= 'error'; ?><?php $form .='" name="pwd" id="user_pass" placeholder="Password">';?>
<?php if (isset($login_error) && $perror == 1) {
$form .= $login_error;
}
$form .='
</div>
<input id="wp-submit" class="btn btn-block" type="submit" value="Login" name="login-submit">
</form>
</div>';
return $form;
}
在此处输入代码
我得到了解决方案。但不使用 wp_signon 函数。
我必须把表单的动作属性放在 'wp-login.php'
它将用户登录到站点。
我正在尝试构建一个带有显示登录表单的短代码的插件,该表单应该用于登录。一切似乎都很好,但是当我尝试使用此表单登录时,它给了我这个错误
警告:无法修改 header 信息 - headers 已经发送(输出开始于 /home/wise/hanan.tk/wp-content/themes/hello-elementor-child/header.php:13)
我正在使用 wp_signon 功能进行登录 这是我的登录代码:
add_shortcode('instagram-login','display_login_form');
function display_login_form(){
global $wpdb;
if(isset($_POST['login-submit']) ){
$uerror = 0;
$perror = 0;
$username = $wpdb->escape($_POST['log']);
$password = $wpdb->escape($_POST['pwd']);
$user_data = array();
$user_data['user_login'] = $username;
$user_data['user_password'] = $password;
$verify_user = wp_signon( $user_data, true );
if (is_wp_error($verify_user) ) {
if (strpos($verify_user->get_error_message(), 'registered') !== FALSE) {
$uerror = 1;
}
else {
$perror = 1;
}
$login_error = '<div class="error">'.$verify_user->get_error_message().'</div>';
} else {
wp_set_auth_cookie( $verify_user->ID );
wp_redirect(get_option( 'instagram_register_login_redirect' ));
exit(1);
}
}
$form = '';
$form .= '<div class="col-md-5" style="margin:0 auto;">
<form name="loginform" id="insta_loginform" action="" method="post">
<div class="form-group">
<label for="username"><span class="mr-1"><img src="http://hanan.tk/wp-content/uploads/2022/01/at.png"></span>Email Address</label>';
$form .= '<input type="text" required class="form-control';
?>
<?php if($uerror == 1) $form .= 'error'; ?><?php $form .='" name="log" id="user_login" placeholder="Email Address">';?>
<?php if (isset($login_error) && $uerror == 1) {
$form .= $login_error;
}
$form .='
</div>
<div class="form-group">
<label for="password"><span class="mr-1"><img src="http://hanan.tk/wp-content/uploads/2022/01/padlock.png"></span>Password</label>';
$form .=' <input type="password" required class="form-control'; ?>
<?php if($perror) $form .= 'error'; ?><?php $form .='" name="pwd" id="user_pass" placeholder="Password">';?>
<?php if (isset($login_error) && $perror == 1) {
$form .= $login_error;
}
$form .='
</div>
<input id="wp-submit" class="btn btn-block" type="submit" value="Login" name="login-submit">
</form>
</div>';
return $form;
}
在此处输入代码
我得到了解决方案。但不使用 wp_signon 函数。 我必须把表单的动作属性放在 'wp-login.php' 它将用户登录到站点。