Ich möchte benutzerdefinierten Abfragecode ausführen, der dem Benutzer den Anmeldedialog anzeigt, wenn er auf eine Schaltfläche klickt und nicht angemeldet ist. Wie kann ich das tun?
Ich möchte benutzerdefinierten Abfragecode ausführen, der dem Benutzer den Anmeldedialog anzeigt, wenn er auf eine Schaltfläche klickt und nicht angemeldet ist. Wie kann ich das tun?
Antworten:
Wenn Sie wissen möchten, ob der Benutzer gerade angemeldet ist. Die anderen Antworten prüfen, ob der Benutzer angemeldet ist oder nicht, wenn die Seite nicht geladen wurde, wenn Sie das Javascript ausführen. Der Benutzer könnte sich beispielsweise in einer separaten Registerkarte angemeldet haben
Tragen Sie dies in Ihr Javascript ein
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
}
});
Gib das in deine functions.php ein
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');
Überprüfen Sie das class
Attribut für body
: Wenn das Thema verwendet wird, verfügt body_class()
der Textkörper über eine Klasse mit Namen logged-in
für angemeldete Benutzer. Beachten Sie, dass die Funktion auch für das Element verwendet html
werden kann.
Beispiel
if(jQuery('body').hasClass('logged-in')){
// Do something
}
Sie können is_user_logged_in()
das Skript auch nur als Bedingung zum Einreihen oder Drucken verwenden.
logged-in
Klasse zu überprüfen . Müssen nur sicher sein , dass Themen verwenden body_class();
oder get_body_class();
andernfalls , dass kein Super zuverlässige Lösung ist. Obwohl ich diese Funktionen in meinen Themen verwende, ist das eine gute Lösung für mich. Danke für die einfache Idee.
Bitte fügen Sie body_class () zu Ihrem HTML-Body hinzu
<body <?php body_class(); ?>>
//your html code
</body>
Dies wird logged-in
für angemeldete Benutzer hinzugefügt. Anschließend können Sie den folgenden jquery-Code verwenden, um Ihren benutzerdefinierten juqery-Code nur für angemeldete Benutzer auszuführen.
if ($('body').hasClass('logged-in')) {
//execute your jquery code.
}
Ein weiteres Beispiel, falls Sie es für AJAX-Aufrufe verwenden mö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(),
)
)
}
}
is_user_logged_in
wird es im DOM als false zwischengespeichert, wenn der Ursprung erreicht wird. Der Benutzerstatus sollte bei Verwendung eines CDN über XHR an einen No-Cache-Thread abstrahiert werden. @Mridul Aggarwals Ansatz funktioniert, die Antwort enthält jedoch keine Cache-Header.
Bitte beachten Sie, dass keines der obigen Beispiele zuverlässig ist, wenn Sie ein Seiten-Cache-Plugin verwenden. Der Code im Body-Tag ist dann statisch. Es gibt auch eine einfache Möglichkeit, dies zu tun (ohne zusätzliche Ajax-Abfrage, die nicht optimal ist).
Wenn Sie den Status des angemeldeten Benutzers mit Javascript testen möchten, können Sie diesen Code verwenden, um das Cookie beim Anmelden des Benutzers zu setzen und das Cookie beim Abmelden des Benutzers zu löschen. Fügen Sie dies zB. zu deinem 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');
Dann ist es ein einfacher Test von Cookies in Javascript.
if (document.cookie.indexOf('wp_user_logged_in') !== -1) {
//do something when user logged in
} else {
//do something when user logged out
}