2010-04-10 64 views
0

我正在寫一個重定向用戶的wordpress插件。由於某種原因,wp_redirect不能按照它認爲的那樣工作,即:似乎根本不會重定向用戶,除非我直接在後面放入死命令。這裏是一些代碼:wp_redirect表演怪異。之後需要die()?

switch($_GET['wp_favorites_tax']) 
{  
case 'post_tag': 
    wp_redirect(add_query_arg('tag', $_GET['wp_favorites_term'], get_bloginfo('url'))); 
    die(); 
    break; 
case 'category': 
    wp_redirect(add_query_arg('cat', $_GET['wp_favorites_term'], get_bloginfo('url'))); 
    die(); 
    break; 
default: 
    wp_redirect(get_bloginfo('url')); 
    die(); 
} 

看來真的很奇怪,我認爲我應該告訴我的腳本死亡,從而使重定向可以工作。我也嘗試了一個基本的

header("Location: $location); 

到類似的目的,即:它仍然需要die()才能工作。真的讓我困惑。謝謝。

回答

4

在某些情況下,這是header()的正常行爲,我不記得現在的細節爲什麼(我認爲它與輸出緩衝有關)。我相信有人能夠對此有所瞭解。

反正header("Location...")之後終止腳本執行的東西應該習慣反正 - 一個header的發送僅僅是瀏覽器請移動到新位置的請求,但不會阻止的發送文檔的其餘部分在登錄系統中使用時可能會產生災難性後果(用戶獲得header重定向,因爲它們未登錄,但也獲得了文檔正文中所有可能的機密數據)。

總是在做標題重定向之後總是調用die()exit

0

通常,HTTP重定向包含客戶端的消息主體,不會自動跟隨標頭。在Opera中試試這個(Options:Network)。

由於wp_direct()可能被稱爲之前翻譯加載,WordPress爲您提供了添加我們自己的(本地化)消息正文的機會。

總之:我認爲,目前的解決方案是最好的,如果你關心I18n。