Quale hook dovrebbe essere utilizzato per aggiungere un'azione contenente un reindirizzamento?
Voglio creare un plugin che prenda determinati parametri URL dalla query string per costruire una nuova query string per la stessa pagina. Sto seguendo l'eccellente libro Professional WordPress Plugin Development, ma non sono sicuro quale hook utilizzare per questa azione. Ecco la mia funzione di azione:
add_action( 'init', 'tccl_redirect' );
function tccl_redirect() {
header ( "Location: http://www.mysite.com/$mypage?$newparam=$newvalue" );
?>
Quali hook sono adatti per i reindirizzamenti header?

Direi template_redirect
. Ma dai un'occhiata al Riferimento delle Azioni.
Esempio
Non dimenticare di usare exit()
dopo il reindirizzamento.
/**
* Questo esempio reindirizza tutto alla pagina index.php
* Puoi fare lo stesso per la dashboard con admin_url( '/' );
* Oppure basare il reindirizzamento su condizioni come
* le funzioni is_*(), current_user_can( 'capability' ), variabili globali, get_current_screen()...
*
* @return void
*/
function wpse12535_redirect_sample() {
exit( wp_redirect( home_url( '/' ) ) );
}
add_action( 'template_redirect', 'wpse12535_redirect_sample' );

Come ha risposto kaiser, l'hook template_redirect
è effettivamente appropriato per i reindirizzamenti.
Inoltre dovresti usare la funzione wp_redirect()
, piuttosto che impostare l'header manualmente.

Grazie per il suggerimento, non mi dispiacerebbe sapere perché wp_redirect è preferibile, qui: http://wordpress.stackexchange.com/questions/12944/why-is-wp-redirect-preferable-to-a-standard-php-header-redirect

Ma direi che questo esempio di kaiser non può funzionare, perché dopo un reindirizzamento questo hook template_redirect viene eseguito ancora e ancora, avrai un reindirizzamento infinito!
Meglio è verificare se sei già nella homepage, in questo modo:
function wpse12535_redirect_sample() {
$current_url = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$site_url = get_bloginfo('siteurl') . "/";
if($current_url != $site_url)
exit( wp_redirect( home_url( '/' ) ));
}
add_action( 'template_redirect', 'wpse12535_redirect_sample');
Funziona bene per me. Qualche suggerimento? Saluti!
