Je veux exécuter un code jquery personnalisé qui affiche la boîte de dialogue de connexion à l'utilisateur s'il clique sur un bouton et qu'il n'est pas connecté. Comment pourrais-je faire cela?
Je veux exécuter un code jquery personnalisé qui affiche la boîte de dialogue de connexion à l'utilisateur s'il clique sur un bouton et qu'il n'est pas connecté. Comment pourrais-je faire cela?
Réponses:
Dans le cas où vous souhaitez savoir si l'utilisateur est connecté au moment actuel. Les autres réponses vérifient si l'utilisateur est connecté ou non lorsque la page est chargée, pas au moment où vous exécutez le javascript. L'utilisateur aurait pu se connecter dans un onglet séparé par exemple
Mettez ceci dans votre 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
}
});
mettez ceci dans vos fonctions.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');
Vérifiez l' class
attribut pour body
: Si le thème utilise body_class()
le corps a une classe nommée logged-in
pour les utilisateurs qui sont connectés. Soyez conscient que la fonction peut également être utilisée sur l'élément html
.
Exemple
if(jQuery('body').hasClass('logged-in')){
// Do something
}
Vous pouvez également simplement l'utiliser is_user_logged_in()
comme condition pour mettre en file d'attente ou imprimer le script.
logged-in
cours. Il suffit de s'assurer que les thèmes utilisent body_class();
ou get_body_class();
sinon, ce n'est pas une solution super fiable. Bien que j'utilise ces fonctions dans mes thèmes, c'est donc une bonne solution pour moi. Merci pour l'idée simple.
Veuillez ajouter body_class () à votre corps html
<body <?php body_class(); ?>>
//your html code
</body>
Cela ajoutera logged-in
pour l'utilisateur connecté, vous pouvez utiliser le code jquery suivant pour exécuter votre code juqery personnalisé uniquement pour l'utilisateur connecté.
if ($('body').hasClass('logged-in')) {
//execute your jquery code.
}
Un autre exemple, au cas où vous voudriez l'utiliser pour des 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(),
)
)
}
}
is_user_logged_in
sera mis en cache comme faux dans le DOM lorsque l'origine est atteinte. L'état utilisateur doit être extrait d'un thread sans cache via XHR lors de l'utilisation d'un CDN. L'approche de @Mridul Aggarwal fonctionne mais avec des en-têtes sans cache dans la réponse.
Veuillez noter qu'aucun des exemples ci-dessus n'est fiable si vous utilisez un plugin de mise en cache de page, alors le code dans la balise body sera statique. Il existe également un moyen simple de le faire (sans requête supplémentaire pour ajax, ce qui n'est pas optimal)
Si vous souhaitez tester l'état de connexion de l'utilisateur avec javascript, vous pouvez utiliser ce code pour définir un cookie lorsque l'utilisateur se connecte et supprimer le cookie lorsque l'utilisateur se déconnecte. Ajoutez ceci par exemple. à votre thème 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');
Ensuite, c'est un simple test de cookie en javascript.
if (document.cookie.indexOf('wp_user_logged_in') !== -1) {
//do something when user logged in
} else {
//do something when user logged out
}