Warning: Cannot modify header information的解決辦法
昨天將本站的wordpress升級到最新版本,今天早上,經過兩位朋友的提醒,才發現用非chrome瀏覽器開啟部落格,頭部會顯示有錯誤,錯誤內容為:
Warning: Cannot modify header information – headers already sent by (output started at /home/tiandiyo/domains/tiandiyoyo.com/public_html/wp-content/themes/freshblog/header.php:5) in /home/tiandiyo/domains/tiandiyoyo.com/public_html/wp-content/themes/freshblog/header.php on line 106
於是查了下header.php的106行程式碼,是setcookie的一段程式碼,本意是來訪者,如果沒有顯示模式(普通or寬屏)的cookie,即第一次來訪,強制儲存cookie為寬屏模式。不知道是不是由於升級到最新版本的wp的原因才報錯的,不管三七二十一,註釋掉語句,將相關邏輯寫入到下面的條件中。
//顯示模式切換 //if(!isset($_COOKIE['MODOFTIANDIYOYO'])) //setcookie('MODOFTIANDIYOYO',1,time()+3600*24*60,"/"); if(isset($_COOKIE['MODOFTIANDIYOYO']) && $_COOKIE["MODOFTIANDIYOYO"] == 0) echo "<div class='sw'><a href='' id='switches'>切換至寬屏</a></div>"; else echo "<div class='sw'><a href='' id='switches'>切換至普通</a></div>";
順便說一下本站實現寬屏自適應和普通模式的思路,利用cookie儲存顯示模式,根據不同的顯示模式載入不同的樣式style。在檔案header.php插入以下程式碼:
<?php if($_COOKIE["MODOFTIANDIYOYO"] == 1 || !isset($_COOKIE['MODOFTIANDIYOYO'])) $reallycss = get_bloginfo('stylesheet_directory') . "/style2.css"; else $reallycss = get_bloginfo('stylesheet_directory') . "/style.css"; ?> <link rel="stylesheet" id = "csslink" type="text/css" href="<?php echo $reallycss; ?>" media="screen" />
並在適當的位置插入第一段顯示模式切換的程式碼,最後在尾部插入js,來儲存cookie以及更改切換的文字。
//瀏覽方式,0普通,1寬屏 document.getElementById("switches").onclick = function(){ var name = document.getElementById("switches").innerHTML; var mycss = document.getElementById("csslink").href; if(name == "切換至寬屏") { mycss = mycss.replace("style.css","style2.css"); document.getElementById("switches").innerHTML = "切換至普通"; SetCookie("MODOFTIANDIYOYO",1); } else { mycss = mycss.replace("style.css2","style.css"); document.getElementById("switches").innerHTML = "切換至寬屏"; SetCookie("MODOFTIANDIYOYO",0); } location.reload(); }
後話,現在大多都自適應了,為什麼tiandi還要加個切換回普通模式的功能呢?因為以前用freshblog的普通版式習慣了,一開始改寬屏模式感覺有些不習慣,不過現在2個月下來,好像也適應了寬屏了,這個切換功能反正也不影響什麼,就留著吧。
文章評分1次,平均分5.0:★★★★★