Quiero ejecutar un código jquery personalizado que muestre el diálogo de inicio de sesión al usuario si hace clic en un botón y no está conectado. ¿Cómo podría hacer eso?
Quiero ejecutar un código jquery personalizado que muestre el diálogo de inicio de sesión al usuario si hace clic en un botón y no está conectado. ¿Cómo podría hacer eso?
Respuestas:
En caso de que desee saber si el usuario ha iniciado sesión en el momento actual. Las otras respuestas verifican si el usuario ha iniciado sesión o no cuando la página se cargó, no cuando está ejecutando JavaScript. El usuario podría haber iniciado sesión en una pestaña separada, por ejemplo
Pon esto en tu 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
}
});
pon esto en tus funciones.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');
Verifique el class
atributo para body
: Si el tema está usando body_class()
el cuerpo tiene una clase nombrada logged-in
para los usuarios que han iniciado sesión. Tenga en cuenta que la función también se puede usar en el elemento html
.
Ejemplo
if(jQuery('body').hasClass('logged-in')){
// Do something
}
También puede usarlo is_user_logged_in()
como condición para poner en cola o imprimir el guión.
logged-in
clase. Solo tengo que estar seguro de que los temas usan body_class();
o de lo get_body_class();
contrario, esa no es una solución súper confiable. Aunque utilizo esas funciones en mis temas, es una buena solución para mí. Gracias por la simple idea.
Agregue body_class () a su cuerpo html
<body <?php body_class(); ?>>
//your html code
</body>
Esto se agregará logged-in
para el usuario registrado, luego puede usar el siguiente código jquery para ejecutar su código juqery personalizado solo para el usuario registrado.
if ($('body').hasClass('logged-in')) {
//execute your jquery code.
}
Otro ejemplo, en caso de que quiera usarlo para llamadas 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
se almacenará en caché como falso en el DOM cuando se golpee el origen. El estado del usuario debe extraerse a un subproceso sin caché a través de XHR cuando se utiliza un CDN. El enfoque de @Mridul Aggarwal funciona pero con encabezados sin caché en la respuesta.
Tenga en cuenta que ninguno de los ejemplos anteriores es confiable en caso de que use un complemento de almacenamiento en caché de página, entonces el código en la etiqueta del cuerpo será estático. También hay una manera simple de hacer esto (sin consulta adicional a ajax que no es óptima)
Si desea probar el estado de inicio de sesión del usuario con javascript, puede usar este código para configurar la cookie cuando el usuario inició sesión y eliminar la cookie cuando el usuario cerró la sesión. Agregue esto, por ejemplo. a su tema 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');
Entonces es una prueba simple 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
}