Home > Software engineering >  headers already sent error when using wp_signon() function in custom plugin
headers already sent error when using wp_signon() function in custom plugin

Time:01-31

I am trying to build a plugin with a shortcode that displays a login form and that form should be used for the login. Everything seems to be fine but when I am trying to log in using this form it gives me this error

Warning: Cannot modify header information - headers already sent by (output started at /home/wise/hanan.tk/wp-content/themes/hello-elementor-child/header.php:13)

I am using wp_signon function for the login Here is my code for the login:

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 >'.$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  style="margin:0 auto;">
        <form name="loginform" id="insta_loginform" action="" method="post">
        <div >
            <label for="username"><span ><img src="http://hanan.tk/wp-content/uploads/2022/01/at.png"></span>Email Address</label>';
   
           $form .=  '<input type="text" required  name="log" id="user_login" placeholder="Email Address">';?>
            <?php if (isset($login_error) && $uerror == 1) {
                $form .= $login_error;
            }  
           
    $form .='
        </div>
        <div >
            <label for="password"><span ><img src="http://hanan.tk/wp-content/uploads/2022/01/padlock.png"></span>Password</label>';
    
        $form .='    <input type="password" required  name="pwd" id="user_pass" placeholder="Password">';?>
            <?php if (isset($login_error) && $perror == 1) {
                $form .= $login_error;
            }  
    $form .='
        </div>
        <input id="wp-submit"  type="submit" value="Login" name="login-submit">
        </form>
        </div>';
        return $form;
}

enter code here

CodePudding user response:

I got to the solution. But not using the wp_signon function. I have to put the action attribute of the form 'wp-login.php' It login a user into the site.

  •  Tags:  
  • Related