Controlla se l'utente è loggato usando JQuery
6 risposta
- voti
-
- 2012-10-19
Nel casoin cui desideri sapere se l'utente è loggatoin questomomento.Le altre risposte controllano se l'utente è loggato omeno quando lapagina è stata caricata,non l'orain cui staieseguendojavascript.Adesempio,l'utentepotrebbe avereffettuato l'accessoin una scheda separata
Inserisciloneltuojavascript
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 } });
inserisciloneltuofunctions.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');
-
Qual èil valore di ajaxurl?What is the value of ajaxurl?
- 0
- 2012-10-24
- Feras Odeh
-
wordpress loimposta su "yoursite.com/wp-admin/admin-ajax.php".Questo è l'URL su cui dovrebberoessereinviatetutte le richieste ajaxwordpress 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
-
HoinseritojQuery.post all'interno delgestore di clicjquerymanonfunziona.haiidea di come risolverlo?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
-
Ho visto che ajaxurlnon è definitonella console.I saw that ajaxurl is not defined in the console.
- 0
- 2012-10-24
- Feras Odeh
-
[codex] (codex.wordpress.org/AJAX_in_Plugins) ha detto chenelle ultime versioni di wordpress questo ègià definito.Forsepuoi definire latua versione di ajaxurl con 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 dovrebbe semprepuntare a "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
-
Nel casoin cui qualcuno ottenga l'ajaxurlnon è definito ... 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 Graziemilleper questo.Graziemille davvero.@MridulAggarwal Thank you very much for this. Really thanks a lot.
- 0
- 2015-03-22
- iSaumya
-
dov'èfunctions.php?where is functions.php?
- 0
- 2016-05-20
- bubakazouba
-
`wp-content/themes/
/functions.php`- assicurati di controllareiltuotema attivo corrente dall'amministratore di 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
Controlla l'attributo
class
perbody
: seiltema utilizzabody_class()
il corpo ha una classe denominatalogged-in
pergli utenti che hannoeffettuato l'accesso. Tienipresente che lafunzionepuòessere utilizzata anche sull'elementohtml
.Esempio conjQuery:
if(jQuery('body').hasClass('logged-in')){ // Do something }
Esempio con JavaScriptpuro:
if (document.body.classList.contains('logged-in')) { // do something }
Puoi anche utilizzare
is_user_logged_in()
come condizioneper accodare o stampare lo 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.-
ilmassimo dei votiper questa risposta: sempliceedefficace.top marks for this answer - simple and effective.
- 0
- 2013-07-20
- Q Studio
-
Mipiace l'idea di controllareil corpo della classe `loggato`.Devi soloessere sicuro chei temi usino `body_class ();` o `get_body_class ();` Altrimenti,non è una soluzione super affidabile.Anche se uso questefunzioninei mieitemi,quindi è unabuona soluzioneperme.Grazieper la sempliceidea.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
Aggiungibody_class () altuo corpo html
<body <?php body_class(); ?>> //your html code </body>
Questo aggiungerà
logged-in
per l'utente loggato,quindipuoi usareil seguente codicejquerypereseguireiltuo codicejuqerypersonalizzato soloper l'utente loggato.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. }
-
Non soperché questo è stato votato.L'approccio èpienamente valido.+1I dunno why this one was down voted. Approach is fully valid. +1
- 0
- 2013-12-31
- kaiser
-
Non lo so.Ho la stessa domanda.La risposta è validamaperché votaregiù.I dont know. I have same question. Answer is valid but why down vote.
- 0
- 2014-01-22
- Monirul Islam
-
Hm.Forseperché usajQueryinvece delmodogiusto (usando unfiltroe il callback).Alcunepersone sono allergiche ajQuery.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
-
buono,manon dirà lo stato di accessoeffettivo se si utilizza unplug-in dimemorizzazionenella cache con cache dellapagina abilitata.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 altroesempio,nel casoin cui desideri utilizzarloper le chiamate 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(), ) ) } }
-
Danotare,questo approcciononfunziona dietro CDN.: DTo note, this approach doesn't work behind CDN. :D
- 0
- 2013-12-30
- Brian Fegter
-
@BrianFegter Potrebbe voler spiegare (o [modificarlo]in)perché?:)@BrianFegter Might want to explain (or [edit] it in) why? :)
- 0
- 2013-12-31
- kaiser
-
Poichéil CDNnon si autentica con WordPress,`is_user_logged_in` verràmemorizzatonella cache comefalsonel DOM quando viene raggiunto l'origine. Lo stato utente dovrebbeessere astrattoin unthread senza cachetramite XHR quando si utilizza un CDN.L'approccio di @Mridul Aggarwalfunzionama conintestazioni senza cachenella risposta.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 Buona cattura.Risolto questo ... credo.Votato anche altre risposte.@BrianFegter Good catch. Fixed that... I think. Upvoted other answers as well.
- 0
- 2013-12-31
- kaiser
-
- 2018-03-25
Tienipresente chenessuno degliesempiprecedenti è affidabilenel casoin cui utilizzi unplug-inper la cache dellapagina,quindiil codiceneltagbody sarà statico. Inoltre c'è unmodo sempliceperfarlo (senza queryextra ad ajax chenon è ottimale)
Se si desideratestare lo stato dell'utente connesso con JavaScript,èpossibile utilizzare questo codiceperimpostarei cookie quando l'utente haeffettuato l'accessoedeliminareil cookie quando l'utente si è disconnesso. Aggiungi questo ades. altuotemafunctions.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');
Quindi è un semplicetest dei cookiein 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 }
-
Questo è davveropiuttosto semplice,affidabilee nelpeggiore dei casi vieneeseguito quasiistantaneamente dopoil caricamento dellapagina (se si carica lo scriptnelpiè dipagina senzablocco del rendering) a differenza di altre risposte.Ajax è lentoe fare affidamento sulle classi del corpofallirànel caching.Ènecessario aggiungere questo cookie altesto dellapolitica sui cookie.Grazie 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
-
In seguito,c'è unproblema con la sincronizzazione dei cookiepredefiniti di WordPresse dei cookie accessibili dagli script appena creati,ma ho ricevuto un'ottimae semplice risposta su come risolverlo: https://stackoverflow.com/questions/56208574/impostazione-script-accessibile-cookie-scadenza-basata-su-wordpress-loggato-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
Ho apprezzatotutte le rispostema localizzare lo script o controllare la classe cssnon sarebbe,amioparere,lamigliorepraticain quantoil controllo della classe cssnon è affidabile al 100%e lafunzione localizza script è,come suggerisceilnome,localizzante.
Dopo Wordpress 4.5,la soluzionemigliore sarebbe aggiungere uno scriptinline come segue:
<?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' );
Epoi ovviamente controlla l'ambitoglobale che ora ètristementeinquinato dallanostra varglobaleisLoggedIn come segue:
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
-
Questo èproprio quello chefa `wp_localize_script ()`.This is just what `wp_localize_script()` does.
- 0
- 2020-02-17
- Jacob Peattie
-
@JacobPeattie Sì,ilmotivoper cui hanno creato `wp_add_inline_script ()` èperevitare che lepersone utilizzino lafunzione di localizzazione dello scriptper dichiarare le variabiliglobali.Come suggerisceilnome,questa è una soluzionemigliore,perché usare qualcos'altro che all'iniziononera destinato a quello scopo se abbiamo unabuona alternativa?@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
-
Non èper questo che è stato aggiunto.È stato aggiuntoper supportare l'aggiunta dipiccolibit di codiceeseguibileprima o dopo uno script,per supportare cose comei caricatori di caratteri.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
-
@JacobPeattieesattamente,e per cosa è stata aggiunta la stringa `wp_localize_script ()`?Inquinando l'ambitoglobale con variabiliglobali?Oper localizzareeffettivamente come suggerisceilnome?@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
-
Di cosa staiparlando?wp_localize_scriptti obbliga ainserirenello spazio deinomi letue variabili all'interno di un oggetto.Latua risposta è l'aggiunta di una variabile all'ambitoglobale senza alcuntipo di spazio deinomi.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,dovepensi dimemorizzare l'oggetto da `wp_localize_script ()`?suggerimento: `window`,comunque dato che sei così attaccato a` wp_localize_script () `,sentiti libero dimantenere latua opinione sull'uso diessoper dichiarare variabilinon correlate alla localizzazioneinvece di usare lafunzione vanilla creataperfarlo,a ciascuno la sua.@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
Voglioeseguireil codicejquerypersonalizzato chemostra lafinestra di dialogo di accesso all'utente sefa clic su unpulsantee non è connesso. Comepotreifarlo?