2011-03-17 42 views
5

Tôi đang sử dụng hàm wp_signon() để đăng nhập người dùng. Tôi làm điều này nhưchức năng wordpress wp_signon không hoạt động

$creds = array();

$creds['user_login'] = $username;

$creds['user_password'] = $password;

$creds['remember'] = true;

$user = wp_signon($creds, false);

tôi muốn gửi người dùng đến trang nhà sau khi đăng nhập.

nhưng tôi phải đối mặt với lỗi sau:

Cảnh báo: Không thể sửa đổi thông tin tiêu đề - headers already sent by (đầu ra bắt đầu tại E: \ xampp \ htdocs \ wpmoodle \ wp-content \ themes \ twentyten \ header.php : 12) trong E: \ xampp \ htdocs \ wpmoodle \ wp-includes \ pluggable.php trên dòng 690.

Cảm ơn bạn trước.

Trả lời

14

wp_signon() cần chạy trước khi bạn gửi bất kỳ trang thực tế nào của mình đến trình duyệt.

Điều này là do một phần của những gì wp_signon() thực hiện là đặt cookie xác thực của bạn. Nó thực hiện điều này bằng cách xuất một tiêu đề "Set-Cookie: ..." - nếu bạn nhìn vào dòng 690 của pluggable.php, nơi lỗi của bạn xuất phát, bạn sẽ thấy rằng dòng đó đặt cookie.

Vì vậy, bởi vì wp_signon() đầu ra tiêu đề, bạn có thể chưa đã gửi bất kỳ nội dung - bởi vì tiêu đề phải luôn luôn được xuất ra trước khi nội dung.

Tuy nhiên, lỗi cho biết bạn đã gửi một số đầu ra - trên dòng 12 của header.php, có lẽ là một số HTML đầu tiên của chủ đề WordPress chuẩn. Điều này về cơ bản chỉ ra rằng bạn cần phải di chuyển cuộc gọi wp_signon() đến một nơi nào đó trước đó trong quá trình xử lý WordPress, vì vậy nó có cơ hội xuất các tiêu đề của nó trước khi bất kỳ nội dung trang nào được gửi đi.

+0

câu trả lời của bạn đã được giải quyết vấn đề của tôi. Tôi đã không nhận thức được với quá trình này mà bạn đã cho tôi, Nó là kiến ​​thức với tôi. Cảm ơn bạn rất nhiều.- :) –

+0

Xin chào. Tôi nhận được lỗi tương tự. Khi nào tôi nên chạy hàm đó? Tôi đang thực hiện 'wp_signon' bên trong một plugin (tạo ra một shortcode). Cảm ơn – DamianFox

0

Nếu ai đó cần nó, đây là giải pháp của tôi:

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'); 
Các vấn đề liên quan