【问题标题】:headers already sent error when using wp_signon() function in custom plugin在自定义插件中使用 wp_signon() 函数时,标头已发送错误
【发布时间】:2022-01-25 05:04:12
【问题描述】:

我正在尝试使用显示登录表单的简码构建一个插件,并且该表单应该用于登录。一切似乎都很好,但是当我尝试使用此表单登录时,它给了我这个错误

警告:无法修改标头信息 - 标头已发送(输出开始于 /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 根据文档,尝试设置各种身份验证 cookie - 因此您可能不应该在此过程中“晚”使用它。在简码函数中处理登录本身是一种相当可疑的方法,恕我直言。
  • 我必须用简码来做。那我该怎么办?
  • 然后告诉所有想要使用你的插件来启用输出缓冲的人吗?哈哈。
  • ob_start() 可以解决问题吗?
  • 不是来自您的简码函数,不是。人们必须在他们的系统/Wp 安装中激活输出缓冲,甚至在它到达你的代码之前。

标签: php wordpress authentication elementor


【解决方案1】:

我找到了解决方案。但不使用 wp_signon 功能。 我必须输入“wp-login.php”形式的动作属性 它将用户登录到站点。

【讨论】:

    猜你喜欢
    • 2016-12-12
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2015-11-15
    • 2021-12-29
    • 2023-03-11
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多