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?
En caso de que quiera 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 no se cargó en el momento en que está ejecutando el 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 atributo class
para body
: si el tema usa body_class()
, el cuerpo tiene una clase llamada logged-in
para los usuarios que han iniciado sesión. Tenga en cuenta que la función se puede usar en el elemento html
también.
Ejemplo
if(jQuery('body').hasClass('logged-in')){
// Do something
}
También puede usar is_user_logged_in()
como condición para poner en cola o imprimir el script.
Agregue body_class () a su cuerpo html
<body <?php body_class(); ?>>
//your html code
</body>
Esto agregará logged-in
para el usuario registrado, luego puede usar el siguiente código jQuery para ejecutar su código de extracción personalizado solo para el usuario registrado.
if ($('body').hasClass('logged-in')) {
//execute your jquery code.
}
Otro ejemplo, en caso de que quieras 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(),
)
)
}
}
Tenga en cuenta que ninguno de los ejemplos anteriores es confiable en caso de que use un complemento de caché de página, entonces el código en la etiqueta del cuerpo será estático. También hay una forma sencilla de hacerlo (sin una 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 finalizó la sesión. Añade esto por ejemplo. a tus funciones de tema.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
}