Come reindirizzare i visitatori a un URL personalizzato usando codice PHP in functions.php

5 giu 2013, 15:50:28
Visualizzazioni: 32.9K
Voti: 1

Gli utenti devono essere reindirizzati a un URL personalizzato che già conosco (fa parte della logica di programmazione). Ho solo bisogno di sapere quale funzione WordPress utilizzare/quale codice PHP usare per reindirizzare l'utente al nuovo URL. Questo codice verrà eseguito all'interno di una funzione PHP in functions.php--> quella funzione prima eseguirà alcune elaborazioni e poi invierà l'utente al nuovo URL

Come posso fare quanto sopra?

Nota: Ho provato a usare wp_redirect ma non funziona.

Questo è il codice che ho provato a usare (che non ha funzionato)--

       $redirecturl = get_post_type_archive_link('property');
       echo "\n\n URL di reindirizzamento per i post di proprietà=" + $redirecturl;
       wp_redirect( "http://" .  $redirecturl + "?post_type=property&search_keyword=" + $search_keyword ;
5
Commenti

Modifica il tuo post per mostrarci il codice che hai provato e che non ha funzionato.

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

@CharlesClarkson ha aggiunto il codice che non ha funzionato al post...

Arvind Arvind
5 giu 2013 16:06:26

@CharlesClarkson wp_redirect funziona solo quando nessun dato è stato già inviato - cioè dovrebbe essere la prima cosa che accade (questo è anche il motivo del messaggio di errore "Cannot Modify header information-....") quindi non posso usarlo...

Arvind Arvind
5 giu 2013 16:20:58

L'echo è la causa del messaggio di avviso. Non puoi usare echo e poi reindirizzare con wp_redirect().

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

Puoi usare Output Buffering, se hai davvero bisogno di usare echo - guarda qui: http://stackoverflow.com/questions/3766353/interview-question-can-we-have-an-echo-before-header

Nicolai Grossherr Nicolai Grossherr
5 giu 2013 16:29:48
Tutte le risposte alla domanda 2
0

Innanzitutto, è difficile credere che wp_redirect non funzioni, di seguito un codice di esempio su come utilizzarlo:

function wpse101952_redirect() {
  global $post;

    if( /*LOGICA CONDIZIONALE*/ ) { //esempi: is_home() o is_single() o is_user_logged_in() o isset($_SESSION['variabile']) 

        wp_redirect( /*URL SPECIFICA*/ );

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

In secondo luogo, ci sarebbe da chiedersi se questo sia l'approccio giusto per il tuo caso, ma per decidere dovresti spiegare meglio cosa stai cercando di fare.


modifica:

La funzione get_post_type_archive_link() ti restituisce il permalink completo, non è necessario aggiungere http:// e ?post_type=property:

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

Eseguendo qualcosa di simile al tuo codice ottengo questo avviso nel log degli errori:

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

Quando ho usato questo per testare:

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

Tutto funziona correttamente, quindi potresti provare:

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

Il codice exit è raccomandato nella Function Reference.

5 giu 2013 16:18:06