问题描述
我想执行自定义 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');
次佳解决方案
检查 body
的 class
属性:如果主题正在使用 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。