2011-10-28 47 views
0

私はビーコン(HTMLイメージタグ)をユーザーがログインした後の最初のページの読み込みページに挿入する必要があるWordPressのプラグインを作成しています彼らはにリダイレクトされます。同じまたは他のページの後続のページビューは、このビーコンコードを含むべきではない。ログイン後最初のページの読み込み時に最初のページの読み込み時にコードを追加

私はこれを行うためにいくつかの方法を試しました。

私は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 
    } 
} 

正しく両方のフック関数の火が、私は最初のフック関数の焼成上の第2の依存のコンテンツの出力をしようとするたびに、私は何も出力を取得していません。

どうすればいいですか?おそらく、wp_loginフックを使わずに確認できる方法があります。

+0

また、クラスプロパティを使用しようとしました。それはどちらもうまくいかなかった。 –

+2

定数を定義しています。この定数は、コードの処理後に期限が切れます。永続化するには、代わりに$ _SESSION変数を使用します。 login()で$ _SESSION ['first_run'] = trueを試してください。次に、add_beacon()で次のように使用します:if(isset($ _SESSION ['first_run'])){//出力ビーコン} –

+0

私はサイトとして使う必要がない場合、複数のWebサーバーで動作します。私はDBセッションハンドラを書くことができますが、それは負荷を追加します。私はフックの読み込み順序についてはわかりませんが、wp_loginがwp_footerの前に来ると仮定しました。それが本当であれば、wp_loginで実行しているコードは、wordpressがwp_footerにヒットする前に処理されていませんか? –

答えて

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'); 

(コードテストしていない...うまくいけば、あなたのアイデアを得る):

コードは次のようなものになるだろう。

クッキーに満足していない場合は、ユーザーが最後に読み込んだページをusermetaテーブルに保存することができます。ただし、最後のページの読み込み後にどれくらい時間がかかるかを呼び出す必要があります新しいセッション。

+0

私は最後にこのタイプのアプローチを行いました。私は本質的にwp_loginフックにクッキーを設定してからそれをチェックし、wp_footerでクリアし、ビーコンを出力した。 –

関連する問題