2012-02-23 9 views
5

He personalizado un complemento para hacer algunas llamadas ajax a admin-ajax.php y funciona muy bien. He copiado el código a otro sitio y ya no funciona para los usuarios que no estén conectados enWordpress admin-ajax resultados en el error 302 redirigir

De Firebug:.

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

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

edición: La pregunta es ¿qué podría un tema posiblemente hacer para redirigir solicitudes de ajax El plugin tiene dos ganchos:

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 

Ambos funcionan bien en la mayoría de los sitios, pero un tema redirige las peticiones de los usuarios no se haya identificado de alguna manera. Como estas acciones son específicas del complemento, no sé dónde comenzar a buscar.

SOLUCIÓN: Muchas gracias a Ronald Huereca para la solución add_action('init', eso es exactamente donde la redirección infractor fue enganchando, en un intento de proteger el área de administración. Ahora solo necesito encontrar una solución segura aquí que no comprometa el área de administración del tema, pero que no obstaculice que otros complementos permitan que los usuarios realicen solicitudes ajax anónimas.

// 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

La pregunta no dice nada sobre el problema. Elaborar. – ThinkingMonkey

+0

Disculpe, el problema es que no tengo idea de qué podría redirigir las solicitudes de AJAX a admin-ajax.php Las acciones son mías, funcionan bien, entonces ¿dónde podría uno "ponerse en el camino" para causar esa redirección? – Sinetheta

+0

Por favor, ignore (eliminar comentario no funciona; ( –

Respuesta

10

Tuve algo similar en un tema. El codificador original estaba tratando de evitar que un usuario que no sea administrador pueda ver el área/wp-admin /.

He aquí un ejemplo:

// 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' 

Me gustaría comprobar su tema para el código fuente similar a lo que tengo.

Cuando encuentre el código, simplemente agregue un condicional adicional para asegurarse de que no se redirige a un usuario si se define la constante DOING_AJAX.

+0

) Golpeó el clavo en la cabeza, era exactamente ese gancho que habían usado, he incluido los detalles en mi pregunta. Ahora solo tengo que pensar en una forma segura de desactivarlo sin comprometer el área de administración del tema ... – Sinetheta

0

cambio de la condición de

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

añadir !is_ajax()

0

que tenían el mismo problema y esto funcionó para mí:

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

Sé que esto es todavía una cuestión de edad, sino que puede echar un vistazo.

Vamos a hacer más rápido el código SI no está interesado en la explicación:

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'); 

EXPLICACIÓN: La razón de este problema es que, o bien algunos de los plugins instalados a redirigir los usuarios administradores no a una página web o cualquier página cuando intentan acceder a wp-admin como http://localhost/project/wp-admin. Entonces esto está causando los problemas.

SO al redireccionar a los no administradores para que no accedan al administrador, puede usar el siguiente código. Esto también funcionará en la llamada ajax del administrador en la interfaz.

Cuestiones relacionadas