我想执行自定义jquery代码,如果他单击按钮但未登录,则会向用户显示登录对话框。我该怎么做?
我想执行自定义jquery代码,如果他单击按钮但未登录,则会向用户显示登录对话框。我该怎么做?
Answers:
如果您想知道用户当前是否已登录。其他答案检查页面加载时用户是否已登录,而不是运行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
}