답변:
현재 사용자가 로그인했는지 알고 싶을 때. 다른 답변은 자바 스크립트를 실행하는 시간이 아닌 페이지가로드 될 때 사용자가 로그인했는지 여부를 확인합니다. 예를 들어 사용자가 별도의 탭에 로그인했을 수 있습니다
이것을 자바 스크립트에 넣으십시오.
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
}
});
이것을 당신의 함수에 넣으십시오.
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();
그렇지 않으면 확실하게 신뢰할 수있는 솔루션이 아닙니다. 테마에서 이러한 기능을 사용하기 때문에 좋은 해결책입니다. 간단한 아이디어에 감사드립니다.
HTML 본문에 body_class ()를 추가하십시오
<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에서 false로 캐시됩니다. CDN을 사용할 때 XHR을 통해 사용자 상태가 캐시없는 스레드로 추상화되어야합니다. @Mridul Aggarwal의 접근 방식은 작동하지만 응답에 캐시 없음 헤더가 있습니다.
페이지 캐시 플러그인을 사용하는 경우 위의 예 중 어느 것도 신뢰할 수 없으므로 body 태그의 코드는 정적입니다. 또한이 작업을 수행하는 간단한 방법이 있습니다 (아약스에 대한 추가 쿼리가 없으므로 최적이 아닙니다)
javascript로 로그인 한 사용자를 테스트하려면이 코드를 사용하여 사용자가 로그인 할 때 쿠키를 설정하고 사용자가 로그 아웃 할 때 쿠키를 삭제할 수 있습니다. 이것을 예를 들어 추가하십시오. 당신의 테마 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');
그런 다음 자바 스크립트에서 쿠키를 테스트합니다.
if (document.cookie.indexOf('wp_user_logged_in') !== -1) {
//do something when user logged in
} else {
//do something when user logged out
}