Quale hook dovrebbe essere utilizzato per aggiungere un'azione contenente un reindirizzamento?

20 mar 2011, 14:26:18
Visualizzazioni: 33.4K
Voti: 22

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?

5
Commenti

Vuoi davvero cambiare l'URL finale o solo le variabili usate in WP_Query?

scribu scribu
20 mar 2011 15:13:32

Il codice che hai postato reindirizzerebbe praticamente ogni pagina, è questo che vuoi? In quali condizioni dovrebbe avvenire questo reindirizzamento? NOTA: Ho comunque +1'ato kaiser, anche template_redirect sarebbe il mio suggerimento.

t31os t31os
20 mar 2011 16:03:29

scribu, voglio cambiare l'url finale e la query string.

jnthnclrk jnthnclrk
24 mar 2011 17:03:35

t31os, ho semplificato il mio codice per la domanda. La versione reale contiene più condizioni.

jnthnclrk jnthnclrk
24 mar 2011 17:04:48

Qual è stato il risultato? Per favore, segna una soluzione.

kaiser kaiser
24 ott 2011 15:56:29
Tutte le risposte alla domanda 3
0
25

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' );
20 mar 2011 15:59:42
1
18

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.

20 mar 2011 16:05:08
Commenti

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

jnthnclrk jnthnclrk
24 mar 2011 17:11:00
0
13

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!

25 set 2013 15:28:51