Necesito redirigir todo el tráfico en mi sitio de WordPress a la página de inicio si AJAX no lo solicita, pero necesito usar la ruta solicitada después de la redirección.
Tengo la redirección trabajando a través de wp_redirect php y un enlace template_redirect, sin embargo, no puedo leer REQUEST_URI para guardarlo a través de una cookie o un encabezado o cualquier cosa.
Tan pronto como se llama a wp_redirect, aparentemente me impide leer los detalles de la solicitud, antes de la redirección. Comente el wp_redirect y se lee bien.
¿Hay algo que me estoy perdiendo aquí, o una mejor manera de hacerlo? Tengo un sitio de una página que está cargando contenido a través de AJAX.
add_action('template_redirect', 'pass_along_request_uri', 1); function pass_along_request_uri() { // $_SERVER['REQUEST_URI'] is the path as expected only if the future wp_redirect is not called... } add_action('template_redirect', 'redirect_to_homepage', 10); function redirect_to_homepage() { if (!is_front_page() && (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')) { wp_redirect(home_url(), 301); exit; } }EDITAR; Solo tenía 2 funciones para probar, ya que registrar $_SERVER['REQUEST_URI'] no tenía sentido para mí. Pensando que si pongo el registro en la prioridad 1, debería registrarse ANTES de que ocurra la redirección con la función de prioridad 10.
Sin embargo, no lo hace. No importa cuándo o dónde parezca, llamar a wp_redirect aparentemente borra los datos de la solicitud original.
function console_log($output, $with_script_tags = true) { $js_code = 'console.log(' . json_encode($output, JSON_HEX_TAG) . ');'; if ($with_script_tags) { $js_code = '<script>' . $js_code . '</script>'; } echo $js_code; } console_log($_SERVER['REQUEST_URI']);Los registros dicen "/ruta/a/página" cuando no llaman a wp_redirect, una vez que wp_redirect está en la cadena, solo escupe "/" (la ruta redirigida).
Estoy pensando que tiene algo que ver con cómo se ponen en cola las acciones con add_action? Lamentablemente, no conozco bien WordPress.
¡Gracias!
Su error aquí fue la forma en que realmente está registrando esto.
El console.log(...) se ejecuta en el lado del cliente, pero allí no puede iniciar sesión mientras realiza su redirección en otro lugar (no puede enviar resultados para que el navegador los interprete, como su elemento de secuencia de comandos, y redirigir en el Mismo tiempo.)
Lo que está viendo es el resultado de ese mismo código de registro, ejecutado a través de la solicitud después de su redirección.
La forma más fácil de lograr lo que desea probablemente sería incluir el valor REQUEST_URI en una sesión. Es posible que deba iniciar uno para ese propósito, porque WP no usa una sesión "tradicional" de forma predeterminada.