在登录后的第一页加载时添加代码到wordpress站点


Adding code to wordpress site on first page load after login

我正在写一个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钩子的情况下进行检查。

尝试使用每个会话的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表中…但是,您必须调用上一次页面加载被视为新会话的时间。