2011-10-28 1 views
0

사용자가 로그인 한 후 첫 페이지로드 페이지 (예 : 페이지)에 비콘 (HTML 이미지 태그)을 삽입해야하는 곳에 WordPress 플러그인을 쓰고 있습니다. 그들은로 리디렉션됩니다. 동일 또는 다른 페이지의 후속 페이지 뷰는이 비컨 코드를 포함하지 않아야합니다.로그인 후 첫 페이지로드시 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 
    } 
} 

정확하게 두 후크 기능 화재하지만 내가 처음 후크 함수 발사에 두 번째 의존 콘텐츠의 출력을 만들려고 할 때마다 나는 더 출력을 얻을 수 없습니다.

어떻게하면됩니까? 아마도 wp_login 훅을 전혀 사용하지 않고 확인할 수있는 방법이있을 것입니다.

+0

또한 클래스 속성을 사용하려고했습니다. 그것도 작동하지 않았다. –

+2

코드를 처리 한 후에 만료되는 상수를 정의합니다. 유지하려면 $ _SESSION 변수를 대신 사용해야합니다. login()에서 다음을 시도하십시오 : $ _SESSION [ 'first_run'] = true; 그런 다음 add_beacon()에서 다음을 사용하십시오 : if (isset ($ _SESSION [ 'first_run'])) {// 출력 비컨} –

+0

특히 사이트를 사용할 필요가 없다면 세션을 사용하고 싶지 않습니다. 여러 웹 서버에서 실행됩니다. DB 세션 핸들러를 작성할 수는 있지만로드가 가중됩니다. 후크 로딩 순서를 잘 모르겠지만 wp_login이 wp_footer 앞에 올 것이라고 가정했습니다. 그게 사실이라면 wp_login에서 실행되는 코드는 워드 프레스가 wp_footer에 도달하기 전에 처리되지 않았습니까? –

답변

2

세션 별 쿠키를 사용해보십시오.

코드는 것 같은 뭔가 :

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에서 지우고 신호를 출력합니다. –

관련 문제