2011-10-28 21 views
0

我正在寫一個wordpress插件,我需要在用戶登錄後首頁加載時將信標(HTML圖像標籤)插入頁面 - 即頁面他們被重定向到。相同或其他頁面的後續頁面視圖不應包含此信標代碼。登錄後在第一頁加載代碼

我試過幾種方法來做到這一點。

我已經給wp_login掛鉤添加了一個函數。從這個函數中,我試着在wp_footer掛鉤中添加另一個函數來輸出內容。

// in my class constructor 
add_action('wp_login', array($this, 'login')); 

public function login() { 
    add_action('wp_footer', array($this, 'add_beacon')); 
} 

這不起作用,所以我試着設置兩個掛鉤前面並設置一個全局變量來指示第一次加載。這不是我的第二個功能,也不是一個常數。

// in my class constructor 
add_action('wp_login', array($this, 'login')); 
add_action('wp_footer', array($this, 'add_beacon')); 

public function login() { 
    define('FIRST_RUN', true); 
} 

public function add_beacon() { 
    if (defined('FIRST_RUN')) { 
     // output beacon 
    } 
} 

兩個鉤子函數火正確,但每當我試圖使內容在第二視輸出第一鉤子函數射擊我沒有得到任何輸出。

任何想法,我可以做到這一點?也許有一些方法可以在不使用wp_login鉤子的情況下進行檢查。

+0

我也嘗試使用類屬性。那也行不通。 –

+2

您正在定義一個常量,該常量在處理代碼後過期。要堅持下去,您需要改用$ _SESSION變量。在login()中試試:$ _SESSION ['first_run'] = true;然後在add_beacon()中使用:if(isset($ _SESSION ['first_run'])){//輸出信標} –

+0

我不是特別熱衷於使用會話,如果我不必作爲網站我是在多個Web服務器上運行。我可以編寫一個數據庫會話處理程序,但會增加負載。我不確定鉤子加載順序,但我認爲wp_login會在wp_footer之前出現。如果這是真的不會在wordpress命中wp_footer之前處理wp_login中運行的任何代碼嗎? –

回答

2

嘗試使用每個會話cookie。

的代碼會是這樣的:

function my_init() { 
    if (is_user_logged_in()) { 
    if (!isset($_COOKIE['beacon'])) { 
     //Track user code/add wp_footer action 
     setcookie ('beacon' 'tracked'); 
    } 
    } 
} 
add_action('init','my_init'); 

(代碼沒有測試..希望你的想法)。

如果您對Cookie不滿意,您可以將用戶加載的最後一頁存儲在usermeta表中......但是,您必須打電話詢問自上次加載頁面以來的最後時間新的會議。

+0

我到最後工作的這種類型的方法。我基本上在wp_login鉤子中設置了一個cookie,然後檢查它並在wp_footer中清除以及輸出信標。 –

相關問題