检查用户是否已使用JQuery登录

时间:2012-10-19 作者:Feras Odeh

我想执行自定义jquery代码,如果用户单击按钮但未登录,它会向用户显示登录对话框。我怎么能那样做?

7 个回复
最合适的回答,由SO网友:Mridul Aggarwal 整理而成

如果您想知道用户当前是否登录。其他答案检查用户是否在加载页面时登录,而不是在运行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\');

SO网友:fuxia

检查class 的属性body: 如果主题正在使用body_class() 主体有一个名为logged-in 对于已登录的用户。请注意,该功能可用于元素html

jQuery示例:

if(jQuery(\'body\').hasClass(\'logged-in\')){
    // Do something
}
纯JavaScript示例:

if (document.body.classList.contains(\'logged-in\')) {
    // do something
}
您也可以使用is_user_logged_in() 作为排队或打印脚本的条件。

SO网友:Monirul Islam

请将body\\u class()添加到html正文

<body <?php body_class(); ?>>
   //your html code
</body>
这将添加logged-in 对于已登录的用户,您可以使用以下jquery代码仅为已登录的用户执行自定义juqery代码。

if ($(\'body\').hasClass(\'logged-in\')) {
       //execute your jquery code.
}

SO网友:Janos Szabo

请注意,如果您使用页面缓存插件,那么body标记中的代码将是静态的,那么上述示例都不可靠。还有一种简单的方法可以做到这一点(没有对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\');
然后是一个简单的javascript cookie测试。

if (document.cookie.indexOf(\'wp_user_logged_in\') !== -1) {
    //do something when user logged in
} else {
    //do something when user logged out
}

SO网友:kaiser

另一个例子是,如果您想将其用于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(),
            )
         )

    }
}

SO网友:Jiyoon

多亏了这篇文章和另一篇文章,我找到了解决问题的方法。我只是在发帖子,以防有人发现它有用。

Works on current WordPress sites

此代码检查用户是否已登录或未使用jquery。如果用户未登录,则会阻止用户右键单击内容并复制图像和文本。

$(document).ready(function(){

    // if user is not logged in...
    if (!document.querySelector(\'body.logged-in\')){
        //lock all content
        disableSelection(document.body);
        // disable image click
        $(\'img\').bind(\'contextmenu\', function(e){return false;}); 
        console.log(\'hello\');
    }

    // function to lock all content
    function disableSelection(target){
        $(function() {
             $(this).bind("contextmenu", function(e) {
                 e.preventDefault();
             });
         }); 
         if (typeof target.onselectstart!="undefined") //For IE 
              target.onselectstart=function(){return false}
         else if (typeof target.style.MozUserSelect!="undefined") //For Firefox
              target.style.MozUserSelect="none"
         else //All other route (For Opera)
              target.onmousedown=function(){return false}
         target.style.cursor = "default";
    }
})

SO网友:Mel Macaluso

我很欣赏所有的答案,但在我看来,本地化脚本或检查css类并不是最好的做法,因为css类检查并不是百分之百可靠的,本地化脚本功能,顾名思义,就是本地化。

在Wordpress 4.5之后,最好的解决方案是添加一个内联脚本,如下所示:

<?php

function detect_login() {
  $isLoggedIn = is_user_logged_in();
  wp_register_script( \'detect_login\', \'\' );
  wp_enqueue_script( \'detect_login\');
  wp_add_inline_script( \'detect_login\', "var isLoggedIn = $isLoggedIn" );
}

add_action( \'wp_enqueue_scripts\', \'detect_login\' );
然后很明显地检查全球范围,它现在被我们的全球var isLoggedIn严重污染,如下所示:window.isLoggedIn

结束

相关推荐

获取定制元数据中的jQuery可排序项

我已经做到了这一点:我有一个特色图片缩略图列表,加载到我主页模板的元数据库中。我被难住了:我想让它们可以用jQuery排序,但我对jQuery真的很陌生。当我拖动框时,它们会移动,但都是随意的,我的占位符在那里,但很小,它们不会掉落并保存位置。谢谢这是我的代码:<script> $( \'.sortable\' ).sortable({ placeholder: \'ui-placeholder\' });