【问题标题】:wordpress wp_signon function not workingwordpress wp_signon 功能不工作
【发布时间】:2011-03-17 06:55:41
【问题描述】:

我正在使用 wp_signon() 函数来登录用户。我正在这样做

$creds = array();

$creds['user_login'] = $username;

$creds['user_password'] = $password;

$creds['remember'] = true;

$user = wp_signon( $creds, false );

我想在登录后将用户发送到主页。

但我面临以下错误:

警告:无法修改标头信息 - 标头已由 E:\xampp\htdocs\wpmoodle 中的(输出开始于 E:\xampp\htdocs\wpmoodle\wp-content\themes\twentyten\header.php:12)发送\wp-includes\pluggable.php 在第 690 行。

提前致谢。

【问题讨论】:

    标签: wordpress


    【解决方案1】:

    wp_signon() 需要在您将任何实际页面发送到浏览器之前运行。

    这是因为wp_signon() 所做的部分工作是设置您的身份验证cookie。它通过输出“Set-Cookie: ...”标题来实现这一点——如果您查看pluggable.php 的第 690 行,您会看到该行设置了一个 cookie。

    所以,因为wp_signon() 输出headers,你不可能已经发送任何content——因为headers 必须总是在内容之前输出。

    但是,错误表明您已经发送了一些输出——在header.php 的第 12 行,可能是标准 WordPress 主题的第一个 HTML。

    这基本上表明您需要将您的wp_signon() 调用移动到 WordPress 处理的早期位置,因此它有机会在发送任何页面内容之前输出其标题。

    【讨论】:

    • 您的回答解决了我的问题。我不知道你给我的这个过程,这对我来说是知识渊博的。非常感谢。-:)
    • 嗨。我遇到了同样的错误。我应该什么时候运行该功能?我在插件(生成简码)内执行wp_signon。谢谢
    • 嗨,这里遇到了同样的问题。运气好吗?
    【解决方案2】:

    如果有人需要,这是我的解决方案:

    function custom_login() {
        if (isset($_POST['submit'])) {
            $login_data = array();
            $login_data['user_login'] = sanitize_user($_POST['username']);
            $login_data['user_password'] = esc_attr($_POST['password']);
    
            $user = wp_signon( $login_data, false );
    
            if ( is_wp_error($user) ) {
                echo $user->get_error_message();
            } else {    
                wp_clear_auth_cookie();
                do_action('wp_login', $user->ID);
                wp_set_current_user($user->ID);
                wp_set_auth_cookie($user->ID, true);
                $redirect_to = $_SERVER['REQUEST_URI'];
                wp_safe_redirect($redirect_to);
                exit;
            }
        }
    }
    
    add_action( 'after_setup_theme', 'custom_login' );
    

    【讨论】:

    • 我把这段代码放在我的函数中,但是因为这个额外的行我添加了这些代码。 if (!empty($user_blogs)) { $siteInfo = array(); foreach ($user_blogs as $site_id => $site_values) { $siteInfo[] = $site_values->siteurl; } wp_safe_redirect($siteInfo[0]);出口; }
    • do_action部分应该是do_action('wp_login', $user->user_login, $user->ID);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多