ボタンをクリックしてもログインしていない場合に、ユーザーにログインダイアログを表示するカスタムjqueryコードを実行したいのですが、どうすればよいでしょうか。
現時点でユーザがログインしているかどうかを知りたい場合他の回答では、ユーザーがログインしているかどうか、ページが読み込まれたときではなく、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()
を使用することもできます。
あなたのHTMLボディにbody_class()を追加してください。
<body <?php body_class(); ?>>
//your html code
</body>
これはログインしたユーザーのためにlogged-in
を追加するでしょう、そしてあなたはログインしたユーザーのためだけにあなたのカスタムjuqeryコードを実行するために次のjqueryコードを使うことができます。
if ($('body').hasClass('logged-in')) {
//execute your jquery code.
}
AJAX呼び出しに使用したい場合のもう1つの例。
// 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(),
)
)
}
}
あなたがページキャッシュプラグインを使用する場合に上記の例のどれも信頼できないことに注意してください、そして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');
それからそれはジャバスクリプトのクッキーの簡単なテストです。
if (document.cookie.indexOf('wp_user_logged_in') !== -1) {
//do something when user logged in
} else {
//do something when user logged out
}