Mit welchem ​​Hook soll eine Aktion hinzugefügt werden, die eine Umleitung enthält?

16

Ich möchte ein Plugin erstellen, das bestimmte URL-Parameter aus der Abfragezeichenfolge abruft, um eine neue Abfragezeichenfolge für dieselbe Seite zu erstellen. Ich verfolge das Buch Professional WordPress Plugin Development, bin mir aber nicht sicher, welchen Hook ich für diese Aktion verwenden soll. Hier ist meine Aktionsfunktion:

add_action( 'init', 'tccl_redirect' );
function tccl_redirect() {
    header ( "Location: http://www.mysite.com/$mypage?$newparam=$newvalue" );
?>

Welche Hooks eignen sich für Header-Weiterleitungen?

jnthnclrk
quelle
Möchten Sie die endgültige URL oder nur die in WP_Query verwendeten Variablen ändern?
Scribu
Der Code, den Sie gepostet haben, leitet grundsätzlich jede Seite um. Ist es das, was Sie wollen? Unter welchen Bedingungen sollte diese Umleitung erfolgen? HINWEIS: Ich habe sowieso kaiser + 1'ed, template_redirectwäre auch mein Vorschlag.
T31OS
scribu, ich möchte die endgültige URL und die Abfragezeichenfolge ändern.
jnthnclrk
t31os, ich habe meinen Code für die Frage vereinfacht. Die reale Sache enthält mehr Bedingungen.
jnthnclrk
Was war das Ergebnis? Markieren Sie eine Lösung.
Kaiser

Antworten:

13

Wie kaiser geantwortet hat, ist template_redirecthook in der Tat für Weiterleitungen geeignet.

Sie sollten auch die wp_redirect()Funktion verwenden, anstatt den Header festzulegen.

Rarst
quelle
Vielen Dank für den Vorschlag, würde es nichts ausmachen zu wissen, warum wp_redirect vorzuziehen ist, hier: wordpress.stackexchange.com/questions/12944/…
jnthnclrk
17

Ich würde sagen template_redirect. Schauen Sie sich aber die Action Reference an .

Beispiel

Vergiss nicht exit()weiterzuleiten.

/**
 * 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' );
Kaiser
quelle
8

Aber ich würde sagen, dass dieses Beispiel von kaiser nicht funktionieren kann, weil nach einer Umleitung dieser Hook template_redirect immer wieder funktioniert und Sie eine endlose Weiterleitung haben werden !

Am besten überprüfen Sie, ob Sie bereits auf der Homepage sind:

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');

Funktioniert für mich gut. Irgendwelche Vorschläge? Grüße!

Alex
quelle