Не могу установить cookie в плагине Wordpress после того, как тема начала рендеринг - PullRequest
1 голос
/ 05 августа 2011

Когда я устанавливаю куки в плагине Wordpress, я получаю ошибку «заголовки уже отправлены». Может кто-нибудь подсказать, как мне это исправить?

Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с /home/content/53/7742253/html/wordpress/wp-content/themes/twentyten/header.php:11) в / home / content /53/7742253/html/wordpress/wp-includes/pluggable.php в строке 692 693 694

мой код: -

     if(isset($_REQUEST['id']) && !is_user_logged_in())

      {

         require_once( ABSPATH . WPINC . '/registration.php' );


    $registration = get_option( 'users_can_register' );

       global $wpdb;

       $user_id = $wpdb->get_var( $wpdb->prepare("SELECT user_id FROM              

                  $wpdb->usermeta           WHERE 

                meta_key = 'id' AND meta_value =%s",$id) );

         if ( empty($user_id) ) 
              {

                 $wp_user_obj = get_user_by('email', $email);

                $user_id = $wp_user_obj->ID;

               }

               if ( $user_id)

                  {

                   wp_set_auth_cookie( $user_id );

                      wp_set_current_user( $user_id );

               if ( isset( $_REQUEST['redirect_to'] ) && !empty( 
           $_REQUEST['redirect_to'] ) ) 
            {

              wp_redirect( home_url() );

                 }
                 else 
               {

                wp_redirect(home_url() );

                 }

                   }      

                     else

                   {

                   $userdata = array();


                $user_id = wp_insert_user($userdata );

                 wp_new_user_notification($user_id,$user_pass);

                  if ( $user_id )
                     {

                         $creds = array();

                        $creds['user_login'] = $username;

                         $creds['user_password'] = $user_pass;

                          if ( !empty( $remember ) )
                            { 

                             $creds['remember'] = true;

                                 }

                    $user = wp_signon( $creds, true );  

                     update_usermeta( $user_id,'id',esc_attr( $_REQUEST['id']));

                 update_usermeta( $user_id,'fname',esc_attr( $_REQUEST['fname']));

                   update_usermeta( $user_id,'lname',$_REQUEST['lname']);

              update_usermeta( $user_id, 'email',esc_attr( $_REQUEST['email']) );

                 wp_redirect(home_url() );

               }

                }

               }    

             global $user_ID; $user = get_userdata( $user_ID );

           if(is_user_logged_in())
         {

                echo $user->user_login ; 

              } 



and heder.php line:-  `<html <?php language_attributes(); ?>>`

Ответы [ 2 ]

2 голосов
/ 06 августа 2011

Вы вызываете вашу функцию set_cookies слишком поздно.В тот момент, когда вы вызываете его, вывод уже начался.Вы должны вызвать его до того, как начнется какой-либо вывод, потому что куки не могут быть установлены, если вывод уже начался (см. Также: setcookie Документы ).

В вашем случае до выполнения header.php строки 11.

Это всего лишь до загрузки темы .

1 голос
/ 06 августа 2011

Вы можете избежать предупреждений об изменении заголовка, буферизируя ваш источник, прежде чем он попадет в браузер. Если у вас нет доступа к php.ini, вы можете добавить php_value output_buffering 4096 к вашему .htaccess или вы можете добавить ob_start("ob_gzhandler"); вверху и ob_end_flush() внизу вашего корня wordpresses index.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...