Quale hook deve essere usato per aggiungere un'azione contenente un reindirizzamento?


16

Voglio creare un plug-in che preleva determinati parametri URL dalla stringa di query per creare una nuova stringa di query per la stessa pagina. Sto seguendo l'eccellente libro di sviluppo di plugin WordPress professionale, 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 delle intestazioni?


Vuoi davvero cambiare l'URL finale o solo le variabili utilizzate in WP_Query?
scribu,

Il codice che hai postato reindirizzerebbe sostanzialmente ogni pagina, è quello che vuoi? In quali condizioni dovrebbe verificarsi questo reindirizzamento? NOTA: ho comunque + + kaiser, template_redirectsarebbe anche il mio suggerimento.
t31os,

scribu, voglio cambiare l'URL finale e la stringa di query.
jnthnclrk,

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

Quale risultato? Contrassegna una soluzione per favore.
Kaiser

Risposte:



17

Direi template_redirect. Ma dai un'occhiata all'azione di riferimento .

Esempio

Non dimenticare di exit()reindirizzare.

/**
 * This example redirects everything to the index.php page
 * You can do the same for the dashboard with admin_url( '/' );
 * Or simply base the redirect on conditionals like 
 * is_*() functions, current_user_can( 'capability' ), globals, get_current_screen()...
 * 
 * @return void
 */
function wpse12535_redirect_sample() {

    exit( wp_redirect( home_url( '/' ) ) );

}

add_action( 'template_redirect', 'wpse12535_redirect_sample' );

8

Ma direi che questo esempio di Kaiser non funziona, perché dopo un reindirizzamento questo hook template_redirect funziona ancora e ancora, avrai un inoltro infinito !

Meglio controllare, 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. Eventuali suggerimenti? Saluti!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.