Cómo redirigir visitantes a una URL personalizada usando código PHP en functions.php

5 jun 2013, 15:50:28
Vistas: 32.9K
Votos: 1

Los usuarios deben ser redirigidos a una URL personalizada que ya conozco (es parte de la lógica de programación). Solo necesito saber qué función de WP usar o qué código PHP utilizar para redirigir al usuario a la nueva URL. Este código se ejecutará dentro de una función PHP en functions.php--> esa función primero realizará algún procesamiento y luego enviará al usuario a la nueva URL.

¿Cómo puedo hacer lo anterior?

Nota: Intenté usar wp_redirect pero no funciona.

Este es el código que intenté usar (que no funcionó):

       $redirecturl = get_post_type_archive_link('property');
       echo "\n\n URL de redirección para posts de propiedades=" . $redirecturl;
       wp_redirect( "http://" .  $redirecturl . "?post_type=property&search_keyword=" . $search_keyword);
5
Comentarios

Edita tu publicación para mostrarnos el código que intentaste y que no funcionó.

Charles Clarkson Charles Clarkson
5 jun 2013 15:59:24

@CharlesClarkson agregué el código que no funcionó a la publicación...

Arvind Arvind
5 jun 2013 16:06:26

@CharlesClarkson wp_redirect solo funciona cuando no se han enviado datos previamente, es decir, debería ser lo primero que ocurre (esa es también la razón del mensaje de error "No se puede modificar la información del encabezado...") por lo tanto no puedo usarlo...

Arvind Arvind
5 jun 2013 16:20:58

El echo es la razón del mensaje de advertencia. No puedes hacer echo de algo y luego redirigir usando wp_redirect().

Charles Clarkson Charles Clarkson
5 jun 2013 16:27:18

Puedes usar Output Buffering, si realmente necesitas hacer echo de algo - mira aquí: http://stackoverflow.com/questions/3766353/interview-question-can-we-have-an-echo-before-header

Nicolai Grossherr Nicolai Grossherr
5 jun 2013 16:29:48
Todas las respuestas a la pregunta 2
0

Primero, es difícil creer que wp_redirect no esté funcionando, aquí hay un código de ejemplo sobre cómo usarlo:

function wpse101952_redirect() {
  global $post;

    if( /*ALGUNA LÓGICA CONDICIONAL*/ ) { //ejemplos: is_home() o is_single() o is_user_logged_in() o isset($_SESSION['alguna_var'])

        wp_redirect( /*ALGÚN URL ESPECÍFICO*/ );

        exit();
    }
}
add_action( 'template_redirect', 'wpse101952_redirect' );

Segundo, estaría la pregunta de si ese es el enfoque correcto para tu caso, pero para decidir eso deberías explicar un poco más lo que estás tratando de hacer.


edición:

La función get_post_type_archive_link() te da el enlace permanente completo, no necesitas agregar http:// ni ?post_type=property:

   wp_redirect( $redirecturl . "?search_keyword=" . $search_keyword );
5 jun 2013 16:06:47
0

Al ejecutar algo similar a tu código, obtengo esta advertencia en el registro de errores:

Warning: Cannot modify header information - headers already sent by (output started at /xxx/wordpress/wp-content/themes/balance/functions.php:4) in /xxx/wordpress/wp-includes/pluggable.php on line 876

Cuando usé esto para probar:

$redirecturl = 'google.com';
wp_redirect( 'http://' .  $redirecturl );
exit;

Todo funciona correctamente, así que podrías intentar:

$redirecturl = get_post_type_archive_link( 'property' );
wp_redirect( 'http://' .  $redirecturl . '?post_type=property&search_keyword=' . $search_keyword );
exit;

El código exit está recomendado en la Referencia de Funciones.

5 jun 2013 16:18:06