回答:
ユーザーが現時点でログインしているかどうかを知りたい場合。もう1つの答えは、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でfalseとしてキャッシュされます。CDNを使用する場合、XHRを介してユーザー状態をキャッシュなしスレッドに抽象化する必要があります。@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');
次に、JavaScriptでのCookieの簡単なテスト。
if (document.cookie.indexOf('wp_user_logged_in') !== -1) {
//do something when user logged in
} else {
//do something when user logged out
}