Я хочу выполнить пользовательский код jquery, который показывает диалог входа в систему для пользователя, если он нажимает кнопку, а он не вошел в систему. Как я могу это сделать?
Я хочу выполнить пользовательский код jquery, который показывает диалог входа в систему для пользователя, если он нажимает кнопку, а он не вошел в систему. Как я могу это сделать?
Ответы:
В случае, если вы хотите знать, вошел ли пользователь в текущий момент. Другие ответы проверяют, вошел ли пользователь в систему или нет, когда страница загружена, а не в тот момент, когда вы запускаете JavaScript. Например, пользователь мог войти в отдельную вкладку
Поместите это в свой 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
}
});
поместите это в ваши 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');
Проверьте class
атрибут на body
: Если тема использует body_class()
тело, есть класс, названный logged-in
для пользователей, которые вошли в систему. Имейте в виду, что функцию можно использовать и для элемента html
.
пример
if(jQuery('body').hasClass('logged-in')){
// Do something
}
Вы также можете просто использовать его is_user_logged_in()
как условие для постановки в очередь или печати сценария.
logged-in
уроке. Просто нужно быть уверенным, что темы используются body_class();
или get_body_class();
В противном случае, это не супер надежное решение. Хотя я использую эти функции в своих темах, так что это хорошее решение для меня. Спасибо за простую идею.
Пожалуйста, добавьте body_class () в ваше тело HTML
<body <?php body_class(); ?>>
//your html code
</body>
Это добавит logged-in
для зарегистрированного пользователя, тогда вы можете использовать следующий код jquery для выполнения вашего пользовательского кода juqery только для зарегистрированного пользователя.
if ($('body').hasClass('logged-in')) {
//execute your jquery code.
}
Другой пример, если вы хотите использовать его для вызовов 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
он будет кэшироваться как ложный в DOM при достижении источника. Состояние пользователя должно быть абстрагировано в поток без кэширования через XHR при использовании CDN. Подход @Mridul Aggarwal работает, но с заголовками без кеша в ответе.
Обратите внимание, что ни один из приведенных выше примеров не является надежным, если вы используете плагин кэширования страниц, тогда код в теге body будет статическим. Также есть простой способ сделать это (без дополнительного запроса к ajax, который не является оптимальным)
Если вы хотите проверить состояние пользователя, вошедшего в систему с помощью javascript, вы можете использовать этот код для установки cookie-файлов при входе пользователя в систему и удаления cookie-файлов при выходе из системы. Добавьте это например. к вашей теме 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');
Тогда это простой тест cookie в javascript.
if (document.cookie.indexOf('wp_user_logged_in') !== -1) {
//do something when user logged in
} else {
//do something when user logged out
}