2014-05-13 30 views
2

我遇到了一個問題在WordPress的AJAX調用有時不能檢測到用戶登錄。在我的index.php文件的主題,我有以下代碼:WordPress的管理員/阿賈克斯沒有檢測到用戶登錄

<?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。兩種警報現在都是正確的。
+1

我有這個問題,發現使用CodeKit的服務器(不同的網址/來源)是原因。加載直接/完整的本地主機路徑解決了它。 –

回答

2

試試這個,讓我知道:

<?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(); 

    } 
?> 
+0

global $ current_user;還返回0用戶:/ – Chun

0

嘗試使用它之前手動復位ajaxurl,例如:

var ajaxurl="http://" + document.domain + "/wp-admin/admin-ajax.php"; 

我的問題是從en.mysite訪問時。 com,ajaxurl被稱爲www.mysite.com,這不知何故使他們不能溝通。