wake-up-neo.com

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

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?

15
jnthnclrk

Wie kaiser geantwortet hat, ist template_redirect hook in der Tat für Redirects geeignet.

Außerdem sollten Sie wp_redirect() function verwenden, anstatt den Header zu setzen.

12
Rarst

Ich würde sagen, template_redirect. Aber werfen Sie einen Blick auf die Aktionsreferenz .

Beispiel

Vergessen Sie nicht, bei der Weiterleitung exit() zu wählen.

/**
 * 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' );
16
kaiser

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

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!

8
Alex