问题描述

我想执行自定义 jquery 代码,如果他点击一个按钮并且他没有登录,那么向用户显示登录对话框,我该怎么做?

最佳解决方案

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

次佳解决方案

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

您也可以使用 is_user_logged_in()作为条件排队或打印脚本。

第三种解决方案

请将 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(),
            )
         )

    }
}

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。