2012-02-23 40 views
5

我已經定製了一個插件來做一些Ajax調用admin-ajax.php並且它工作的很好。我複製的代碼轉移到另一個網站,它不再適用於未登錄誰的用戶Wordpress admin-ajax導致錯誤302重定向

從螢火蟲:

POST http://<subdomain>.<server>/wp-admin/admin-ajax.php 302 Moved Temporarily 1.08s  

GET http://<subdomain>.<server>/ 200 OK 

編輯:現在的問題是什麼可能一個主題可能做重定向ajax請求。該插件有兩個掛鉤:

add_action('wp_ajax_em_ajax_getEvents', 'em_ajax_getEvents'); // ajax for logged in users 
add_action('wp_ajax_nopriv_em_ajax_getEvents', 'em_ajax_getEvents'); // ajax for not logged in users 

他們都很好地工作在大多數的網站,但一個主題重定向非登錄用戶莫名其妙的請求。由於這些操作對於插件而言是特定的,因此我無法從哪裏開始尋找。

SOLUTION:非常感謝Ronald Huerecaadd_action('init'的解決方案,那就是究竟在何處違規重定向被掛上,在保護管理方面的嘗試。現在我只需要在這裏找到一個安全的解決方案,不會影響主題的管理區域,但也不妨礙其他插件允許用戶發出匿名的Ajax請求。

// stop users accessing the admin 
add_action('init', array($this, 'prevent_admin_access'), 0); 

function prevent_admin_access() {  

    if (strpos(strtolower($_SERVER['REQUEST_URI']), '/wp-admin') !== false) { 
     $current_user = wp_get_current_user(); 

     if(!user_can($current_user->ID, 'administrator') && (!user_can($current_user->ID, 'contributor'))){ 
      wp_redirect(get_option('siteurl')); 
     } 
    } 
} 
+0

這個問題沒有提到任何有關問題。闡述。 – ThinkingMonkey 2012-02-23 08:00:19

+0

對不起,問題在於我不知道可以將ajax請求重定向到admin-ajax。PHP的行動是我自己的,他們工作得很好,所以在哪裏可以阻礙重定向。 – Sinetheta 2012-02-23 18:23:41

+0

請忽略(刪除評論不工作;( – 2014-02-10 15:13:00

回答

10

我在主題中發生了類似的情況。原始編碼器試圖阻止非管理員用戶看到/ wp-admin /區域。

下面是一個例子:

// Block Access to /wp-admin for non admins. 
function custom_blockusers_init() { 
    if (is_user_logged_in() && is_admin() && !current_user_can('administrator')) { 
    wp_redirect(home_url()); 
    exit; 
    } 
} 
add_action('init', 'custom_blockusers_init'); // Hook into 'init' 

我會檢查你的相似,我有源代碼的主題。

當您找到代碼時,只需添加一個額外的條件以確保在定義了常數的情況下不會重定向用戶。

+0

)你碰到了頭部,這正是他們用過的鉤子;我已經在我的問題中包含了細節,現在我只需要想一個安全的方法來禁用它不影響主題的管理區域... – Sinetheta 2012-02-25 19:55:48

0

變化條件

!user_can($current_user->ID, 'administrator') && (!user_can($current_user->ID, 'contributor')) && !is_ajax() 

添加!is_ajax()

0

我有完全相同的問題,這個工作對我來說:

function mt_redirect_admin() { 

if (! current_user_can('manage_options') && (! defined('DOING_AJAX') || ! DOING_AJAX)) { 
wp_redirect(site_url()); 
exit; 
} 
} 

add_action('admin_init', 'mt_redirect_admin', 1); 
3

我知道這仍然是一個老問題,但你可以看一看。

讓這樣做的代碼更快,如果沒有興趣ON說明:

function redirect_non_admin_user(){ 
    if (!defined('DOING_AJAX') && !current_user_can('administrator')){ 
     wp_redirect(site_url()); exit; 
    } 
} 


add_action('admin_init', 'redirect_non_admin_user'); 

說明: 這樣做的原因的問題是,無論是一些已安裝的插件的重定向非管理員用戶主頁或當任何頁面他們嘗試訪問wp-admin,如http://localhost/project/wp-admin。所以這造成了問題。

因此,當您從訪問管理員重定向非管理員時,您可以使用下面的代碼。這也可以在前端的管理員ajax調用中使用。