Wordpress admin / ajax未检测到用户登录

时间:2014-05-13 18:30:49

标签: ajax wordpress

我在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并不这么认为(有时候并非总是如此 - 和我无法弄清楚为什么会这么间歇......)。我注意到的是这是有效的,我也不确定为什么:

  1. 登录Wordpress
  2. 转到index.php。
  3. 您将收到第一个警告,表示您已登录,但第二个警报(来自admin-ajax) 否则说。
  4. 转到/ wp-admin。由于您已经登录,因此无需再次登录即可看到您的仪表板。
  5. 返回index.php。这两个警报现在都是正确的。

2 个答案:

答案 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,它以某种方式使它们无法通信。