Ce hook trebuie folosit pentru a adăuga o acțiune care conține o redirecționare?

20 mar. 2011, 14:26:18
Vizualizări: 33.4K
Voturi: 22

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?

5
Comentarii

Vrei de fapt să modifici URL-ul final sau doar variabilele folosite în WP_Query?

scribu scribu
20 mar. 2011 15:13:32

Codul pe care l-ai postat ar redirecționa practic fiecare pagină, asta vrei să faci? În ce condiții ar trebui să se întâmple această redirecționare? NOTĂ: Am dat +1 lui kaiser oricum, template_redirect ar fi și sugestia mea.

t31os t31os
20 mar. 2011 16:03:29

scribu, vreau să modific URL-ul final și șirul de interogare.

jnthnclrk jnthnclrk
24 mar. 2011 17:03:35

t31os, am simplificat codul meu pentru întrebare. În realitate, conține mai multe condiții.

jnthnclrk jnthnclrk
24 mar. 2011 17:04:48

Care a fost rezultatul? Te rog marchează o soluție.

kaiser kaiser
24 oct. 2011 15:56:29
Toate răspunsurile la întrebare 3
0
25

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

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.

20 mar. 2011 16:05:08
Comentarii

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

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

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!

25 sept. 2013 15:28:51