2011-10-28 6 views
0

J'écris un plugin wordpress où j'ai besoin d'injecter une balise (balise d'image HTML) dans la page sur la première page de chargement après que l'utilisateur se connecte - à savoir la page ils sont redirigés vers. Les pages suivantes de la même page ou d'autres pages ne doivent pas inclure ce code de balise.Ajouter du code au site wordpress charger sur la première page charger après le login

J'ai essayé plusieurs façons de le faire.

J'ai ajouté une fonction au hook wp_login. De cette fonction j'ai essayé d'ajouter une autre fonction au crochet wp_footer pour sortir le contenu. Cela ne fonctionnait pas. J'ai donc essayé de régler les deux crochets à l'avant et de définir une variable globale pour indiquer la première charge. Cela n'a pas été pris en compte par ma deuxième fonction et ni l'une ni l'autre n'était une constante.

// 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 
    } 
} 

Les deux fonctions crochet feu correctement, mais chaque fois que j'essaie de faire la sortie du contenu dans la seconde dépendant du premier tir de la fonction crochet je reçois pas de sortie.

Des idées comment je peux le faire? Il y a peut-être un moyen de vérifier sans utiliser le hook wp_login.

+0

J'ai également essayé d'utiliser une propriété de classe. Cela n'a pas fonctionné non plus. –

+2

Vous définissez une constante qui expire après le traitement du code. Pour persister, vous devez utiliser une variable $ _SESSION à la place. Dans login(), essayez: $ _SESSION ['first_run'] = true; Ensuite, dans add_beacon(), utilisez: if (isset ($ _SESSION ['first_run'])) {// balise de sortie} –

+0

Je ne suis pas particulièrement désireux d'utiliser la session si je n'ai pas à le faire comme le site que je suis travailler sur s'exécute sur plusieurs serveurs Web. Je pourrais écrire un gestionnaire de session de DB mais cela ajouterait la charge. Je ne suis pas sûr de l'ordre de chargement du hook, mais j'ai supposé que wp_login viendrait avant wp_footer. Si c'est vrai, le code que j'exécuterai dans wp_login n'a-t-il pas été traité avant que Wordpress n'atteigne wp_footer? –

Répondre

2

Essayez d'utiliser un cookie de session.

Le code serait quelque chose comme:

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

(code non testé .. espérons-vous l'idée).

Si vous n'êtes pas satisfait du cookie, vous pouvez stocker la dernière page chargée par l'utilisateur dans la table usermeta ... cependant, vous devrez appeler pour savoir depuis combien de temps le chargement de la dernière page est considéré comme un nouvelle session

+0

Je suis allé avec ce type d'approche à la fin qui a fonctionné. J'ai essentiellement mis un cookie dans le crochet wp_login et puis vérifié pour cela et effacé dans wp_footer ainsi que la sortie de la balise. –

Questions connexes