Vérifiez si l'utilisateur est connecté en utilisant JQuery
6 réponses
- votes
-
- 2012-10-19
Dans le cas où vous souhaitez savoir si l'utilisateurest connecté aumoment actuel.Les autres réponses vérifient si l'utilisateurest connecté ounon lorsque lapageest chargéepas l'heure où vousexécutez lejavascript.L'utilisateurpeut s'être connecté dans un onglet séparéparexemple
Mettez ceci dans votrejavascript
var data = { action: 'is_user_logged_in' }; jQuery.post(ajaxurl, data, function(response) { if(response == 'yes') { // user is logged in, do your stuff here } else { // user is not logged in, show login form here } });
mettez ceci dans votrefunctions.php
function ajax_check_user_logged_in() { echo is_user_logged_in()?'yes':'no'; die(); } add_action('wp_ajax_is_user_logged_in', 'ajax_check_user_logged_in'); add_action('wp_ajax_nopriv_is_user_logged_in', 'ajax_check_user_logged_in');
In case you want to know if the user is logged in at the current moment. The other answers check if the user is logged in or not when the page loaded not the time when you're running the javascript. The user could have logged in in a seperate tab for instance
Put this in your javascript
var data = { action: 'is_user_logged_in' }; jQuery.post(ajaxurl, data, function(response) { if(response == 'yes') { // user is logged in, do your stuff here } else { // user is not logged in, show login form here } });
put this in your functions.php
function ajax_check_user_logged_in() { echo is_user_logged_in()?'yes':'no'; die(); } add_action('wp_ajax_is_user_logged_in', 'ajax_check_user_logged_in'); add_action('wp_ajax_nopriv_is_user_logged_in', 'ajax_check_user_logged_in');
-
Quelleest la valeur d'ajaxurl?What is the value of ajaxurl?
- 0
- 2012-10-24
- Feras Odeh
-
wordpress le définit sur «yoursite.com/wp-admin/admin-ajax.php».C'est l'url sur laquelletoutes les requêtes ajax sont censées êtreenvoyéeswordpress sets it to 'yoursite.com/wp-admin/admin-ajax.php'. That's the url on which all the ajax requests are supposed to be sent
- 1
- 2012-10-24
- Mridul Aggarwal
-
J'aimis lejQuery.post dans legestionnaire de clicsjquerymais celane fonctionnepas.avez-vous uneidée comment le résoudre?I put the jQuery.post inside jquery click handler but this doesn't work. do you have any idea how to solve it?
- 0
- 2012-10-24
- Feras Odeh
-
J'ai vu que ajaxurln'estpas défini dans la console.I saw that ajaxurl is not defined in the console.
- 0
- 2012-10-24
- Feras Odeh
-
[codex] (codex.wordpress.org/AJAX_in_Plugins) dit que dans les dernières versions de wordpress,celaest déjà défini.Peut-être que vouspouvez définir votrepropre version d'ajaxurl avec wp_localize_script[codex](codex.wordpress.org/AJAX_in_Plugins) said that in latest wordpress versions this is already defined. Maybe you can define your own version of ajaxurl with wp_localize_script
- 1
- 2012-10-24
- Mridul Aggarwal
-
L'URL doittoujourspointer vers "domain.com/wp-admin/admin-ajax.php"The url should always point to "domain.com/wp-admin/admin-ajax.php"
- 0
- 2012-10-24
- Mridul Aggarwal
-
Incase quiconque obtenir le ajaxurln'estpas défini ... http://stackoverflow.com/questions/17710728/how-to-load-ajax-in-wordpress#17713643Incase anyone get the ajaxurl is not defined... http://stackoverflow.com/questions/17710728/how-to-load-ajax-in-wordpress#17713643
- 0
- 2015-02-03
- Daniel
-
@MridulAggarwal Mercibeaucouppour cela.Vraimentmercibeaucoup.@MridulAggarwal Thank you very much for this. Really thanks a lot.
- 0
- 2015-03-22
- iSaumya
-
oùestfunctions.php?where is functions.php?
- 0
- 2016-05-20
- bubakazouba
-
`wp-content/themes/
/functions.php` - assurez-vous de vérifier votrethème actif actuel depuis l'administrateur WordPress. `wp-content/themes//functions.php`- make sure you check your current active theme from WordPress admin. - 0
- 2016-05-20
- Mridul Aggarwal
-
- 2012-10-19
Vérifiez l'attribut
class
pourbody
: Si lethème utilisebody_class()
,le corps a une classenomméelogged-in
pour les utilisateurs connectés. Sachez que lafonctionpeut également être utilisée sur l'élémenthtml
.Exemple avecjQuery:
if(jQuery('body').hasClass('logged-in')){ // Do something }
Exemple avec du JavaScriptpur:
if (document.body.classList.contains('logged-in')) { // do something }
Vouspouvez également simplement utiliser
is_user_logged_in()
comme conditionpourmettreen file d'attente ouimprimer le script.Check the
class
attribute forbody
: If the theme is usingbody_class()
the body has a class namedlogged-in
for users that are logged in. Be aware the function can be used on the elementhtml
too.Example with jQuery:
if(jQuery('body').hasClass('logged-in')){ // Do something }
Example with pure JavaScript:
if (document.body.classList.contains('logged-in')) { // do something }
You can also just use
is_user_logged_in()
as a condition to enqueue or print the script.-
lesmeilleuresnotespour cette réponse - simpleet efficace.top marks for this answer - simple and effective.
- 0
- 2013-07-20
- Q Studio
-
J'aime l'idée de simplement vérifier le corps de la classe «connecté».Ilfautjuste s'assurer que lesthèmes utilisent `body_class ();` ou `get_body_class ();` Sinon,cen'estpas une solution superfiable.Bien quej'utilise cesfonctions dansmesthèmes,c'est donc unebonne solutionpourmoi.Mercipour l'idée simple.I like the idea of just checking the body for `logged-in` class. Just have to be sure that themes use `body_class();` or `get_body_class();` Otherwise, that's not a super reliable solution. Although, I use those functions in my themes, so that's a good solution for me. Thanks for the simple idea.
- 0
- 2017-02-16
- Michael Ecklund
-
- 2012-10-19
Veuillez ajouterbody_class () à votre corps HTML
<body <?php body_class(); ?>> //your html code </body>
Cela ajoutera
logged-in
pour l'utilisateur connecté,puis vouspourrez utiliser le codejquery suivantpourexécuter votre code dejuqerypersonnalisé uniquementpour l'utilisateur connecté.if ($('body').hasClass('logged-in')) { //execute your jquery code. }
Please add body_class() to your html body
<body <?php body_class(); ?>> //your html code </body>
This will add
logged-in
for logged user then you can use following jquery code to execute your custom juqery code only for logged user.if ($('body').hasClass('logged-in')) { //execute your jquery code. }
-
Jene saispaspourquoi celui-ci a été rejeté.L'approcheestpleinement valable.+1I dunno why this one was down voted. Approach is fully valid. +1
- 0
- 2013-12-31
- kaiser
-
Jene saispas.J'ai lamême question.La réponseest valablemaispourquoi voter contre.I dont know. I have same question. Answer is valid but why down vote.
- 0
- 2014-01-22
- Monirul Islam
-
Hm.Peut-êtreparce qu'il utilisejQuery au lieu de labonnemanière (en utilisant unfiltreet le rappel).Certainespersonnes sont allergiques àjQuery.Hm. Maybe because it uses jQuery instead of the right way (using a filter and the callback). Some people are allergic to jQuery.
- 0
- 2014-01-22
- kaiser
-
bien,mais celane diraitpas l'état de connexion réel si vous utilisez unplugin demiseen cache avec le cache depage activé.good, but it wouldnt tell actual login state if you use a cacheing plugin with page cache enabled.
- 1
- 2018-03-19
- Janos Szabo
-
- 2012-10-19
Un autreexemple,au cas où vous voudriez l'utiliserpour les appels AJAX.
// Simplified... please note, that all names/vars/etc. in my class got unique names. // ...the same goes for the script handler. class wpse69814_example { public $response; public function __construct() { add_action( 'wp_enqueue_scripts', array( $this, 'enqueue' ) ); add_action( 'wp_enqueue_scripts', array( $this, 'localize' ), 20 ); } public function enqueue() { wp_enqueue_script( 'wpse69814_handler', plugins_url( 'url/to/file.js', __FILE__ ), array( 'jquery' ), filemtime( plugins_dir_path( __FILE__ ).'/path/to/file.js' ), true ); } public function localize() { wp_localize_script( 'wpse69814_handler, 'wpse69814_object', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'ajax_nonce' => wp_create_nonce( 'wpse69814_nonce' ), 'action' => 'wpse69814-handler-action', 'data' => array( 'is_user_logged_in' => is_user_logged_in(), ) ) } }
Another example, in case you want to use it for AJAX calls.
// Simplified... please note, that all names/vars/etc. in my class got unique names. // ...the same goes for the script handler. class wpse69814_example { public $response; public function __construct() { add_action( 'wp_enqueue_scripts', array( $this, 'enqueue' ) ); add_action( 'wp_enqueue_scripts', array( $this, 'localize' ), 20 ); } public function enqueue() { wp_enqueue_script( 'wpse69814_handler', plugins_url( 'url/to/file.js', __FILE__ ), array( 'jquery' ), filemtime( plugins_dir_path( __FILE__ ).'/path/to/file.js' ), true ); } public function localize() { wp_localize_script( 'wpse69814_handler, 'wpse69814_object', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'ajax_nonce' => wp_create_nonce( 'wpse69814_nonce' ), 'action' => 'wpse69814-handler-action', 'data' => array( 'is_user_logged_in' => is_user_logged_in(), ) ) } }
-
Ànoter,cette approchene fonctionnepas derrière CDN.:RÉTo note, this approach doesn't work behind CDN. :D
- 0
- 2013-12-30
- Brian Fegter
-
@BrianFegter Pourrait vouloirexpliquer (ou [modifier])pourquoi?:)@BrianFegter Might want to explain (or [edit] it in) why? :)
- 0
- 2013-12-31
- kaiser
-
Étant donné que le CDNne s'authentifiepas avec WordPress,`is_user_logged_in` seramisen cache commefalse dans le DOM lorsque l'origineest atteinte.L'état de l'utilisateur doit êtreextrait vers unthread sans cache via XHR lors de l'utilisation d'un CDN.L'approche de @Mridul Aggarwalfonctionnemais avec desen-têtes sans cache dans la réponse.Since the CDN doesn't authenticate with WordPress, `is_user_logged_in` will be cached as false in the DOM when origin is hit User state should be abstracted out to a no-cache thread via XHR when using a CDN. @Mridul Aggarwal's approach works but with no-cache headers in the response.
- 0
- 2013-12-31
- Brian Fegter
-
@BrianFegter Bonneprise.Correction de ça ...je pense.J'ai également votépour d'autres réponses.@BrianFegter Good catch. Fixed that... I think. Upvoted other answers as well.
- 0
- 2013-12-31
- kaiser
-
- 2018-03-25
Veuilleznoter qu'aucun desexemples ci-dessusn'estfiable si vous utilisez unplugin de cache depage,alors le code dans labalisebody sera statique. Ilexiste également unmoyen simple de lefaire (sans requête supplémentaire à ajax,ce quin'estpas optimal)
Si vous souhaiteztester l'état de connexion de l'utilisateur avecjavascript,vouspouvez utiliser ce codepour définir un cookie lorsque l'utilisateurest connectéet supprimer le cookie lorsque l'utilisateur se déconnecte. Ajoutez ceciparexemple. à votrethèmefunctions.php
function login_function() { setcookie('wp_user_logged_in', 1, time() + 31556926, '/'); $_COOKIE['wp_user_logged_in'] = 1; } add_action('wp_login', 'login_function'); function logout_function() { unset($_COOKIE['wp_user_logged_in']); setcookie('wp_user_logged_in', null, -1, '/'); } add_action('wp_logout', 'logout_function');
Ensuite,c'est un simpletest de cookieen javascript.
if (document.cookie.indexOf('wp_user_logged_in') !== -1) { //do something when user logged in } else { //do something when user logged out }
Please note that none of the above examples are reliable in case you use a page cacheing plugin, then the code in body tag will be static. Also there is a simple way to do this (with no extra query to ajax which is not optimal)
If you want to test user logged in state with javascript, you can use this code to set cookie when user logged in and delete cookie when user logged out. Add this eg. to your theme functions.php
function login_function() { setcookie('wp_user_logged_in', 1, time() + 31556926, '/'); $_COOKIE['wp_user_logged_in'] = 1; } add_action('wp_login', 'login_function'); function logout_function() { unset($_COOKIE['wp_user_logged_in']); setcookie('wp_user_logged_in', null, -1, '/'); } add_action('wp_logout', 'logout_function');
Then its a simple test of cookie in javascript.
if (document.cookie.indexOf('wp_user_logged_in') !== -1) { //do something when user logged in } else { //do something when user logged out }
-
C'esten effet assez simple,fiableet dans lepire des cas,s'exécutepresqueinstantanément après le chargement de lapage (si le scriptest chargé dans lepied depage sansblocage du rendu) contrairement aux autres réponses.Ajaxest lentet lefait de s'appuyer sur des classes de corps échouera lors de lamiseen cache.Besoin d'ajouter ce cookie autexte de lapolitiqueen matière de cookies.Merci Janos.This is indeed pretty simple, reliable and in worst case executes almost instantly after page load (if loading script in footer without render blocking) unlike other answers. Ajax is slow and relying on body classes will fail on caching. Need to add this cookie to Cookie Policy text. Thank You Janos.
- 0
- 2019-04-19
- Ryszard Jędraszyk
-
Enguise de suivi,il y a unproblème avec la synchronisation des cookies WordPresspar défautet du cookie accessiblepar scriptnouvellement créé,maisj'ai reçu une réponse simpleet excellente sur lafaçon de le résoudre: https://stackoverflow.com/questions/56208574/setting-script-accessible-cookie-expiry-based-on-wordpress-log-in-cookieAs a follow-up, there is a problem with synchronization of default WordPress cookies and newly created script-accessible cookie, but I've received a great and simple answer on how to solve it: https://stackoverflow.com/questions/56208574/setting-script-accessible-cookie-expiry-based-on-wordpress-logged-in-cookie
- 0
- 2019-05-27
- Ryszard Jędraszyk
-
- 2020-02-16
J'ai appréciétoutes les réponsesmais localiser le script ou vérifier la classe cssne serait,àmon avis,pas lameilleurepratique car la vérification de la classe cssn'estpasfiable à 100%et lafonction de script localiserest,comme sonnom l'indique,localisante.
Après Wordpress 4.5,lameilleure solution serait d'ajouter un scripten ligne comme suit:
<?php function detect_login() { $isLoggedIn = is_user_logged_in(); wp_register_script( 'detect_login', '' ); wp_enqueue_script( 'detect_login'); wp_add_inline_script( 'detect_login', "var isLoggedIn = $isLoggedIn" ); } add_action( 'wp_enqueue_scripts', 'detect_login' );
Etpuis évidemment vérifier laportéeglobale quiestmaintenantmalheureusementpolluéeparnotre varglobaleisLoggedIn comme suit:
window.isLoggedIn
I appreciated all the answers but localize script or checking the css class would be, in my opinion, not the best practice as the css class checking is not 100% reliable and the localize script function is, as the name suggests, localising.
After Wordpress 4.5 the best solution would be adding an inline script as follows:
<?php function detect_login() { $isLoggedIn = is_user_logged_in(); wp_register_script( 'detect_login', '' ); wp_enqueue_script( 'detect_login'); wp_add_inline_script( 'detect_login', "var isLoggedIn = $isLoggedIn" ); } add_action( 'wp_enqueue_scripts', 'detect_login' );
And then obviously check the global scope which is now sadly polluted by our global var isLoggedIn as follows:
window.isLoggedIn
-
C'estexactement ce quefait `wp_localize_script ()`.This is just what `wp_localize_script()` does.
- 0
- 2020-02-17
- Jacob Peattie
-
@JacobPeattie Oui,la raisonpour laquelleils ont créé `wp_add_inline_script ()`est d'éviter que lesgens utilisent lafonction de script localizepour déclarer des variablesglobales.Comme sonnom l'indique,c'est unemeilleure solution,pourquoi utiliser quelque chose d'autre qui au débutn'étaitpas destiné à cettefin sinous avons unebonne alternative?@JacobPeattie Yes, the reason why they created `wp_add_inline_script()` is to avoid people using the localize script function to declare global variables. As the name suggests this is a better fit, why using something else which in the beginning wasn't intended for that purpose if we have a good alternative?
- 0
- 2020-02-17
- Mel Macaluso
-
Cen'estpaspour cela qu'il a été ajouté.Il a été ajoutépourprendreen charge l'ajout depetitsmorceaux de codeexécutable avant ou après un script,pourprendreen charge des choses comme les chargeurs depolices.https://make.wordpress.org/core/2016/03/08/enhanced-script-loader-in-wordpress-4-5/That's not what it was added for. It was added to support adding small bits of executable code before or after a script, to support things like font loaders. https://make.wordpress.org/core/2016/03/08/enhanced-script-loader-in-wordpress-4-5/
- 0
- 2020-02-17
- Jacob Peattie
-
@JacobPeattieexactement,et pourquoi la chaîne `wp_localize_script ()` a-t-elle été ajoutée?Polluer laportéeglobale avec des variablesglobales?Oupour localiser comme sonnom l'indique?@JacobPeattie exactly, and what was `wp_localize_script()` string added for? Polluting the global scope with global variables? Or to actually localize as the name suggests?
- 0
- 2020-02-17
- Mel Macaluso
-
Qu'est-ce quetu racontes?wp_localize_script vous oblige àespace denoms vos variables à l'intérieur d'un objet.Votrepropre réponseest d'ajouter une variable à laportéeglobale sans aucune sorte d'espace denoms.What are you talking about? wp_localize_script forces you to namespace your variables inside an object. Your own answer is adding a variable to the global scope without any sort of namespace.
- 0
- 2020-02-17
- Jacob Peattie
-
@JacobPeattieehm,oùpensez-vous que vous allez stocker l'objet du `wp_localize_script ()`?astuce: `window`,detoutefaçon comme vous êtestellement attaché à` wp_localize_script () `n'hésitezpas àgarder votre opinion sur son utilisationpour déclarer des variablesnon liées à la localisation au lieu d'utiliser lafonction vanillafaitepour lefaire,à chacune la sienne.@JacobPeattie ehm, where do you think you will store the object from the `wp_localize_script()`? hint: `window`, anyways as you are so attached to `wp_localize_script()` feel free to keep your opinion about using it for declaring variables not related to localising instead of using the vanilla function made to do so, to each his own.
- 0
- 2020-02-17
- Mel Macaluso
Je veuxexécuter un codejquerypersonnalisé qui affiche laboîte de dialogue de connexion à l'utilisateur s'il clique sur unboutonet qu'iln'estpas connecté. Commentpuis-jefaire cela?