2016-02-19 41 views
0

我已經編寫了一個使用Ajax更新客戶端並在生產服務器上正常工作的Wordpress插件。如果以完全管理員權限登錄,本地wampserver上的相同插件僅返回正確的Ajax響應 - 所有其他用戶(包括公共)都會收到只是主頁的html響應!Wp ajax本地wamp除非以管理員身份登錄

這顯然是我的wampserver的一個設置問題,但我感到困惑的是,如果我以管理員身份登錄,我可以讓插件工作(僅)。

任何指針,以幫助識別問題將不勝感激。

由於幾個最初的反應,我已經做了一些調查,相信是有可能發生在我註冊的Ajax調用掛鉤的PHP函數,除非一個以管理員身份登錄重定向。我相信我遵循所有正確的Ajax設置(掛鉤既註冊了正常也註冊了非priv,緩存設置爲false,json編碼返回並終止於wp_die()等)。我還在10個月前發現了一個有人遇到過類似問題的帖子('whitenoisedb',15年4月24日7:55提問),並且'已解決....在front.page.php中處理AJAX,因爲它是不可能的,通過使用管理 - Ajax.php',他仍然想知道爲什麼它不能做'正確'的方式!

重新迭代,問題只出現在我的本地wampserver開發服務器上,並繼續讓我神祕。

回答

0

在您的本地服務器上,可能是從wp-admin重定向到主頁的重定向,除非您是管理員?如果是這樣,你應該使用DOING_AJAX const來防止重定向ajax調用。 例如:

function admin_redirect() 
{ 
    if (is_admin() && !current_user_can('administrator') && !defined('DOING_AJAX')) 
    { 
     wp_safe_redirect(home_url()); 
    } 
} 

add_action('admin_init', 'admin_redirect'); 
+0

謝謝,我試過了,但它沒有幫助 - 可能是因爲重定向獨立於此鉤子發生,正如我上面所建議的。 – joe90

+0

這只是一個例子,你可以使用'!defined('DOING_AJAX')'。找到重定向完成的位置並將'!defined('DOING_AJAX')'添加到條件。 –

0

我碰到了這一段時間。查看this section of the codex它談論「面向查看器的Ajax面向」。有兩個動作。一個用於登錄的人,另一個用於其他人。具體做法是:

add_action('wp_ajax_my_action', 'my_action_callback'); 
add_action('wp_ajax_nopriv_my_action', 'my_action_callback'); 
+0

謝謝 - 我知道這一點,並已編碼,但它不包括我遇到的具體問題,因爲你需要登錄和管理員才能獲得正確的AJAX響應。 – joe90

0

編輯:嘗試添加這對你的插件或主題的functions.php文件你正在使用本地:

add_action('send_headers', 'add_custom_headers'); 

function add_custom_headers() { 

    if (true !== WP_DEBUG) { 
     return; 
    } 

    header('Expires: Tue, 01 Jan 2000 00:00:00 GMT'); 
    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); 
    header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); 
    header('Cache-Control: post-check=0, pre-check=0', false); 
    header('Pragma: no-cache'); 
} 

有幾件事情,你可以嘗試:

  1. 確保您在AJAX調用中禁用緩存:$.ajax({ url: '...', cache: false })。您也可以使用$.ajaxSetup({ cache: false }),但我會建議您不要這樣做,因爲它在全球範圍內應用該設置,並可能會干擾其他插件和/或主題。

  2. 使用的腳本版本一個隨機字符串,以防止它被緩存。我最常做的本地開發時設置WP_DEBUG真我wp-config.php,然後檢查是否WP_DEBUG入隊我的腳本和樣式的時候也是如此。如果是這樣,我用time()替換版本字符串。例如:

    $version = (true === WP_DEBUG) ? time() : '1.0.0'; 
    wp_enqueue_script('script', '...', array(), $version, true); 
    
  3. 清除瀏覽器緩存。

  4. 如果您在本地安裝一個緩存插件,請確保您清除緩存有作爲。

如果這些都不起作用,請嘗試重新啓動WAMP進程或重新啓動計算機。

+0

謝謝,也嘗試了所有這些,所以不要認爲這是一個緩存問題。至於重新啓動 - 我要爲世界紀錄... – joe90

+0

編輯:顯然你不能添加格式化的代碼註釋,所以我編輯我原來的帖子與一些代碼,你可以添加到您的插件,看看是否修復問題給你。 –

相關問題