Відповіді:
У випадку, якщо ви хочете знати, чи користувач увійшов у поточний момент. Інші відповіді перевіряють, чи користувач увійшов чи ні, коли сторінка завантажується не час, коли ви запускаєте 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
}
});
помістіть це у свої функції.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 працює, але у відповідь не має кеш-заголовків.
Зауважте, що жоден із наведених вище прикладів не є надійним, якщо ви використовуєте плагін кешування сторінок, код у тезі тіла буде статичним. Також є простий спосіб зробити це (без зайвих запитів до ajax, який не є оптимальним)
Якщо ви хочете перевірити, як користувач увійшов у стан за допомогою JavaScript, ви можете використовувати цей код для встановлення файлу cookie під час входу користувача та видалення файлу cookie під час виходу з нього. Додайте це, наприклад. до ваших тематичних функцій.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
}