我在Wordpress中遇到一个问题,其中AJAX调用有时无法检测到用户已登录。在我的主题的index.php文件的末尾,我有以下代码:
<?php
$user_id = get_current_user_id();
?>
<script>
alert("Logged in as user #<?php echo $user_id; ?>");
</script>
因此,如果您是登录并访问该网页的用户,您将收到一条显示您的用户ID的提醒。这很有效。
然而,当我通过admin-ajax.php执行AJAX调用时,它有时不会检测到用户是否已登录。这是我后来在我的index.php中执行ajax调用的内容(使用jQuery ajax):
$.ajax({
url: ajaxUrl,
type: "post",
data: {
action: 'test_ajax'
},
beforeSend: function(){},
complete: function(){},
success: function(data){
alert(data);
},
error: function(){}
});
在我的functions.php中:
add_action('wp_ajax_test_ajax', 'test_ajax');
function test_ajax() {
$user_id = get_current_user_id();
echo "Your user id is: ".$user_id;
exit();
}
我注意到有时wp_ajax甚至无法运行,所以它会回显0.所以我添加了nopriv:
add_action('wp_ajax_nopriv_test_ajax', 'test_ajax');
但是即使运行它,它仍然认为用户没有登录,get_current_user_id()将返回0.
我也试过wp_get_current_user();和全局$ current_user;,但它们也返回空用户,即没有用户登录。
我不确定这里发生了什么,因为index.php中的get_current_user_id()有效,但有时候admin-ajax并不这么认为(有时候并非总是如此 - 和我无法弄清楚为什么会这么间歇......)。我注意到的是这是有效的,我也不确定为什么:
答案 0 :(得分:1)
试试这个,让我知道:
<?php
add_action('wp_ajax_test_ajax', 'test_ajax');
function test_ajax() {
global $current_user;
$user_id = get_current_user_id();
echo "Your user id is: ".$user_id;
exit();
}
?>
答案 1 :(得分:0)
尝试在使用之前手动重置ajaxurl,例如:
var ajaxurl="http://" + document.domain + "/wp-admin/admin-ajax.php";
我的问题是,当从en.mysite.com访问时,ajaxurl被称为www.mysite.com,它以某种方式使它们无法通信。