WordPress erlaubt mit Hilfe einer Funktion einen einfachen Redirect zu einer URL, die Funktion wp_redirect()
ermöglicht die Angabe einer Adresse und eines Status.
Damit ist es einfaches eine Weiterleitung auch im Backend von WordPress zu realisieren. Zwei unterschiedliche Beispiele sollen dies verdeutlichen. Der Unterschied liegt in der Abfrage der URL, auf die geprüft wird.
/**
* Redirects to another page, with a workaround for the IIS Set-Cookie bug.
*
* @link http://support.microsoft.com/kb/q176113/
* @since 1.5.1
* @uses apply_filters() Calls 'wp_redirect' hook on $location and $status.
*
* @param string $location The path to redirect to
* @param int $status Status code to use
* @return bool False if $location is not set
*/
function wp_redirect($location, $status = 302)
Im ersten Fall wird der Inhalt der Variable $pagenow
genutzt, der immer den Seitennamen enthält und so eine saubere Prüfung erlaubt. In beiden Funktionen wird die Funktion admin_url()
abgefragt, da die erst seit Version 2.6 im Core von WordPress ist. Je nach Version, kann man diese Abfrage einsparen und ebenso gibt es weitere Funktionen dieser Art, die das Setzen der Adresse erleichtern, siehe Beitrag dazu.
function fb_redirect_1() {
global $pagenow;
if ( 'plugins.php' === $pagenow ) {
if ( function_exists('admin_url') ) {
wp_redirect( admin_url('edit-comments.php') );
} else {
wp_redirect( get_option('siteurl') . '/wp-admin/' . 'edit-comments.php' );
}
}
}
if ( is_admin() )
add_action( 'admin_menu', 'fb_redirect_1' );
Die zweite Möglichkeit ist ein wenig anders und prüft auf die URL, auf die globale Variable $_SERVER
und dabei den Schlüssel REQUEST_URI
. Dies is tzum Beispiel bei der Abfrage des Dashboard im Admin-Bereich sinnvoll, denn dieser wird nicht immer mit einem Wert in $pagenow
zurück gegeben, heißt: man erreicht das Dashboard zum Teil über die index.php
oder direkt via wp-admin/
.
function fb_redirect_2() {
if ( preg_match('#wp-admin/?(index.php)?$#', $_SERVER['REQUEST_URI']) ) {
if ( function_exists('admin_url') ) {
wp_redirect( admin_url('edit-comments.php') );
} else {
wp_redirect( get_option('siteurl') . '/wp-admin/' . 'edit-comments.php' );
}
}
}
if ( is_admin() )
add_action( 'admin_menu', 'fb_redirect_2' );