Ce hook trebuie folosit pentru a adăuga o acțiune care conține o redirecționare?
Vreau să construiesc un plugin care preia anumiți parametri url din query string pentru a construi un nou query string pentru aceeași pagină. Urmez excelenta carte Professional WordPress Plugin Development, dar nu sunt sigur ce hook să folosesc pentru această acțiune. Iată funcția mea de acțiune:
add_action( 'init', 'tccl_redirect' );
function tccl_redirect() {
header ( "Location: http://www.mysite.com/$mypage?$newparam=$newvalue" );
?>
Ce hook-uri sunt potrivite pentru redirecționările header?

Aș spune template_redirect
. Dar aruncă o privire la Referința pentru Acțiuni.
Exemplu
Nu uita să folosești exit()
la redirecționare.
/**
* Acest exemplu redirecționează totul către pagina index.php
* Poți face același lucru pentru panoul de administrare cu admin_url( '/' );
* Sau pur și simplu bazează redirecționarea pe condiții precum
* funcțiile is_*(), current_user_can( 'capability' ), globale, get_current_screen()...
*
* @return void
*/
function wpse12535_redirect_sample() {
exit( wp_redirect( home_url( '/' ) ) );
}
add_action( 'template_redirect', 'wpse12535_redirect_sample' );

După cum a răspuns kaiser, hook-ul template_redirect
este într-adevăr potrivit pentru redirecționări.
De asemenea, ar trebui să utilizați funcția wp_redirect()
, în loc să setați header-ul manual.

Mulțumesc pentru sugestie, aș fi curios de ce wp_redirect este preferabil, aici: http://wordpress.stackexchange.com/questions/12944/why-is-wp-redirect-preferable-to-a-standard-php-header-redirect

Dar aș spune că acest exemplu de la kaiser nu poate funcționa, deoarece după o redirecționare acest hook template_redirect se activează din nou și din nou, veți avea o redirecționare la infinit!
Mai bine este să verificați dacă sunteți deja pe pagina de start, astfel:
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');
Funcționează perfect pentru mine. Aveți sugestii? Salutări!
