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?


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:



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

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!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.