Je veux exécuter un code jQuery personnalisé qui montre la boîte de dialogue de connexion à l'utilisateur s'il clique sur un bouton et qu'il n'est pas connecté. Comment puis-je faire cela?
Au cas où vous voudriez 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 chargée n'est pas l'heure à laquelle vous exécutez le javascript. L'utilisateur pourrait s'être connecté 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 votre 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');
Vérifiez l'attribut class
pour body
: Si le thème utilise body_class()
, le corps a une classe nommée logged-in
pour les utilisateurs connectés. Sachez 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 utiliser is_user_logged_in()
comme condition pour mettre en file d'attente ou imprimer le script.
S'il vous plaît ajouter body_class () à votre corps HTML
<body <?php body_class(); ?>>
//your html code
</body>
Ceci ajoutera logged-in
pour l'utilisateur connecté, vous pourrez alors 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.
}
Autre exemple, au cas où vous souhaiteriez l’utiliser pour 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(),
)
)
}
}
Veuillez noter qu'aucun des exemples ci-dessus n'est fiable si vous utilisez un plugin de mise en cache de pages, le code dans la balise body sera statique. En outre, il existe un moyen simple de le faire (sans requête supplémentaire à 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 le cookie lorsque l'utilisateur est connecté et supprimer le cookie lorsqu'il est déconnecté. 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
}