Überprüfen Sie, ob der Benutzer mit JQuery
6 Antworten
- Stimmen
-
- 2012-10-19
Falls Sie wissenmöchten,ob der Benutzergerade angemeldetist.Die anderen Antwortenprüfen,ob der Benutzer angemeldetist odernicht,wenn die Seitegeladen wurde,nicht zu dem Zeitpunkt,zu dem Sie das Javascript ausführen.Der Benutzer könnte sichbeispielsweise aufeiner separaten Registerkarte angemeldet haben
Fügen Sie diesin Ihr Javascriptein
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 } });
füge diesin deinefunctions.php
einfunction 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');
-
Wasist der Wert von Ajaxurl?What is the value of ajaxurl?
- 0
- 2012-10-24
- Feras Odeh
-
WordPress setztes auf 'yoursite.com/wp-admin/admin-ajax.php'.Dasist die URL,unter der alle Ajax-Anfragengesendet werden sollenwordpress 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
-
Ich habe denjQuery.postin denjquery click handlereingefügt,aber dasfunktioniertnicht.Hast dueine Idee,wie dues lösen kannst?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
-
Ich habegesehen,dass Ajaxurlnichtin der Konsole definiertist.I saw that ajaxurl is not defined in the console.
- 0
- 2012-10-24
- Feras Odeh
-
[codex] (codex.wordpress.org/AJAX_in_Plugins) sagte,dass diesin denneuesten WordPress-Versionenbereits definiertist.Vielleicht können Siemit wp_localize_script Ihreeigene Version von ajaxurl definieren[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
-
Die URL sollteimmer auf "domain.com/wp-admin/admin-ajax.php" verweisen.The url should always point to "domain.com/wp-admin/admin-ajax.php"
- 0
- 2012-10-24
- Mridul Aggarwal
-
Fallsjemand das Ajaxurlbekommt,istesnicht definiert ... 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 Vielen Dank dafür.Wirklich vielen Dank.@MridulAggarwal Thank you very much for this. Really thanks a lot.
- 0
- 2015-03-22
- iSaumya
-
woistfunctions.php?where is functions.php?
- 0
- 2016-05-20
- bubakazouba
-
`wp-content/theme/
/functions.php`- stellen Sie sicher,dass Sie Ihr aktuell aktives Thema von WordPress admin überprüfen. `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
Überprüfen Sie das Attribut
class
fürbody
: Wenn das Designbody_class()
verwendet,hat der Bodyeine Klassemit dem Namenlogged-in
für angemeldete Benutzer. Beachten Sie,dass die Funktion auchfür das Elementhtml
verwendet werden kann.Beispielmit jQuery:
if(jQuery('body').hasClass('logged-in')){ // Do something }
Beispielmit reinem JavaScript:
if (document.body.classList.contains('logged-in')) { // do something }
Sie können aucheinfach
is_user_logged_in()
als Bedingung zum Einreihen oder Drucken des Skripts verwenden.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.-
Bestnotenfür diese Antwort -einfach undeffektiv.top marks for this answer - simple and effective.
- 0
- 2013-07-20
- Q Studio
-
Ichmag die Idee,nur den Körper auf "angemeldete" Klasse zu überprüfen.Stellen Sienur sicher,dass die Themen "body_class ()" oder "get_body_class ()" verwenden. Andernfallsist dies keinebesonders zuverlässige Lösung.Obwohlich diese Funktionenin meinen Themen verwende,ist daseine gute Lösungfürmich.Dankefür dieeinfache Idee.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
Bittefügen Siebody_class () zu Ihrem HTML-Body hinzu
<body <?php body_class(); ?>> //your html code </body>
Dadurch wird
logged-in
für den angemeldeten Benutzer hinzugefügt. Anschließend können Sie denfolgenden JQuery-Code verwenden,um Ihrenbenutzerdefinierten Juqery-Codenurfür den angemeldeten Benutzer auszuführen.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. }
-
Ich weißnicht,warum dieser abgelehnt wurde.Ansatzist vollgültig.+1I dunno why this one was down voted. Approach is fully valid. +1
- 0
- 2013-12-31
- kaiser
-
Ich weißesnicht.Ich habe diegleiche Frage.Die Antwortistgültig,aber warum abstimmen?I dont know. I have same question. Answer is valid but why down vote.
- 0
- 2014-01-22
- Monirul Islam
-
Hm.Vielleicht,weilesjQuery anstelle des richtigen Weges verwendet (unter Verwendungeines Filters und des Rückrufs).Einige Menschen sind allergischgegen 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
-
gut,aberes würdenicht dentatsächlichen Anmeldestatus anzeigen,wenn Sieein Caching-Pluginmit aktiviertem Seiten-Cache verwenden.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
Ein weiteres Beispielfür den Fall,dass Sieesfür AJAX-Aufrufe verwendenmöchten.
// 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(), ) ) } }
-
Zubeachtenist,dass dieser Ansatz hinter CDNnichtfunktioniert.: D.To note, this approach doesn't work behind CDN. :D
- 0
- 2013-12-30
- Brian Fegter
-
@BrianFegter Vielleichtmöchten Sieerklären (oder [bearbeiten]),warum?:) :)@BrianFegter Might want to explain (or [edit] it in) why? :)
- 0
- 2013-12-31
- kaiser
-
Da sich das CDNnichtbei WordPress authentifiziert,wird "is_user_logged_in"im DOM als "false" zwischengespeichert,wenn der Ursprungerreicht wird. Der Benutzerstatus solltebei Verwendungeines CDN über XHRin einen Thread ohne Cache abstrahiert werden.Der Ansatz von @Mridul Aggarwalfunktioniert,jedochmit Headern ohne Cachein der Antwort.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 Guter Fang.Behoben,dass ...ich denke.Auch andere Antworten wurdenpositivbewertet.@BrianFegter Good catch. Fixed that... I think. Upvoted other answers as well.
- 0
- 2013-12-31
- kaiser
-
- 2018-03-25
Bittebeachten Sie,dass keines der obigen Beispiele zuverlässigist,wenn Sieein Seiten-Cache-Plugin verwenden. Der Codeim Body-Tagist statisch. Esgibt aucheine einfache Möglichkeit,dies zutun (ohne zusätzliche Abfrage an Ajax,dienicht optimalist)
Wenn Sie den angemeldeten Benutzerstatusmit Javascripttestenmöchten,können Sie diesen Code verwenden,um Cookies zu setzen,wenn der Benutzer angemeldetist,und Cookies zu löschen,wenn der Benutzer abgemeldetist. Fügen Sie dies hinzu,z. zu Ihrem Themafunctions.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');
Dannistesein einfacher Test von Cookiesin 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 }
-
Diesistin der Tat ziemlicheinfach,zuverlässig und wirdim schlimmsten Fallfast sofortnach dem Laden der Seite ausgeführt (wenn das Skriptin der Fußzeilegeladen wird,ohne dass das Rendernblockiert wird),im Gegensatz zu anderen Antworten.Ajaxist langsam und das Verlassen auf Körperklassen schlägtbeim Cachingfehl.Siemüssen dieses Cookie zum Text der Cookie-Richtlinie hinzufügen.Vielen Dank,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
-
Im Anschlussgibt esein Problemmit der Synchronisierung von Standard-WordPress-Cookies undneuerstellten Cookies,auf die über Skripte zugegriffen werden kann. Ich habejedocheine großartige undeinfache Antwort zur Lösungerhalten: https://stackoverflow.com/questions/56208574/Einstellungsskript-zugänglicher-Cookie-Ablaufbasierend auf WordPress-eingeloggtem 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
Ich habe alle Antwortengeschätzt,aber das Lokalisieren von Skripten oder das Überprüfen der CSS-Klasse wäremeiner Meinungnachnicht diebeste Vorgehensweise,da die Überprüfung von CSS-Klassennicht 100% zuverlässigist und die Funktion zum Lokalisieren von Skripten,wie der Name schon sagt,lokalisiert.
Nach Wordpress 4.5 wäre diebeste Lösung,ein Inline-Skript wiefolgt hinzuzufügen:
<?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' );
Und dann überprüfen Sienatürlich denglobalen Bereich,derjetzt leider durch unsereglobale VariableisLoggedIn verschmutzt wird,wiefolgt:
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
-
Diesistgenau das,was `wp_localize_script ()`tut.This is just what `wp_localize_script()` does.
- 0
- 2020-02-17
- Jacob Peattie
-
@JacobPeattie Ja,der Grund,warum sie "wp_add_inline_script ()"erstellt haben,besteht darin,zu vermeiden,dass Personen die Funktion "localize script" verwenden,umglobale Variablen zu deklarieren.Wie der Name schon sagt,passt diesbesser. Warumetwas anderes verwenden,das anfangsnichtfür diesen Zweckgedacht war,wenn wireine gute Alternative haben?@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
-
Dafür wurdeesnicht hinzugefügt.Es wurde hinzugefügt,um das Hinzufügen kleiner Teile von ausführbarem Code vor odernacheinem Skript zu unterstützen und um Dinge wie Schriftlader zu unterstützen.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
-
@JacobPeattiegenau,und wofür wurde der String `wp_localize_script ()` hinzugefügt?Denglobalen Geltungsbereichmit globalen Variablen verschmutzen?Oder umtatsächlich zu lokalisieren,wie der Name schon sagt?@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
-
Worüber redest du?wp_localize_script zwingt Sie,Ihre Variableninnerhalbeines Objekts zubenennen.Ihreeigene Antwortbesteht darin,demglobalen Bereicheine Variable ohne Namespace hinzuzufügen.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,wo denkst du wirst du das Objekt aus dem `wp_localize_script ()` speichern?Hinweis: `window`,wie auchimmer,so wie Sie an` wp_localize_script ()`gebunden sind,können Sie Ihre Meinung über die Verwendungfür die Deklaration von Variablen,dienichtmit der Lokalisierung zusammenhängen,behalten,anstatt die dafür vorgesehene Vanille-Funktionfürjeden zu verwenden.@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
Ichmöchteeinen benutzerdefinierten Abfragecode ausführen,der dem Benutzer den Anmeldedialog anzeigt,wenner aufeine Schaltfläche klickt undnicht angemeldetist. Wie kannich dastun?