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' );
Vielen Dank für dieses kleine, aber nützliche Plug-In. Können wir wahrscheinlich bald gut gebrauchen.
Ich würd gerne nach einem Userlogin/Userlogout wieder auf die vorherige Seite zurück leiten. Doch erstens hab ich nur den Hook "wp_authenticate" gefunden (und nichts für den Logout) und zweitens weiß ich nicht wie ich zur URL der vorherigen Seite komme. Auch meine if-Anweisung um Admins auszuschließen, funktioniert nicht.
Kannst du mir vllt kurz helfen und zumindest eines der 3 Probleme lösen?
Danke!
@Daniel: Die Funktion wp_logout_url() könnte helfen. Schaue mal in die beiden Beiträge (Beitrag1 & Beitrag 2), die einige Ansätze davon enthalten.
Hallo,
Hab vielen Dank für den Super Tipp.
ABER
Wenn ich das mache bekomme ich die Meldung
(ist ein XAMPP) Aber ich dachte das sollte dann so gehen?
add_action('wp_head', 'hello_world');function hello_world() {
$istseite = "http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
if(get_permalink() != $istsite) wp_redirect(get_permalink(), $status = 301);
}
@Frank: Alles klar. Hat geklappt. Vielen Dank.
Hallo Frank,
weiß nicht ob ich jetzt falsch denke aber könnte das auch mein Problem beheben?
Die Webseite http://kinglaurinpark.it/e/ funktioniert mit Div-Containern und Ankern und wenn nun bei Google folgende Seite gefunden wird http://kinglaurinpark.it/e/gallery/155/2009 funktioniert das ganze logisch nicht mehr
Kurz und bündig wäre mir am liebsten wenn alle URL's die nicht http://kinglaurinpark.it/e/ sind, dorthin umgeleitet werden.
@lukas: dazu würde ich wohl einer Weiterleitung via htaccess einrichten. Da ist man flexibler und dass spart ein wenig Ressourcen für diesen Zweck.
@Frank: danke, da hätte ich selbst drauf kommen können.
was ich nicht verstehe wieso
Redirect permanent /e/gallery/155/2009 /e/index.phpfunktioniert und
Redirect permanent /e/gallery /e/index.phpnicht? naja egal, vorerst klappts so und in der Zwischenzeit frische ich meine Apache-Kentnisse ein wenig auf
Ich würde aber keinen 302er Status Code beim redirecten mitschicken, sondern stattdessen einen sauberen 301er
Vielen Dank fürs hochladen..
Hat mir sehr geholfen...
Tobi
Gibt es somit auch die Möglichkeit, ähnlich wie bei WikiPedia aus einem Beitrag heraus woanders hinzulinken? Würde also gerne einen Tag / Funktionsname in meinen Beitrag setzen, welcher auf eine andere Seite verlinkt.
Beispiel: example.org/wordpress/beitrag-xy verlinkt beim Aufruf direkt auf google.com z.B.
@Sascha: ja, dazu gibt es diverse Plugins, schau mal im Verzeichnis bei WordPress, eventuell nach Auto Link suchen
Perfekt. Der Beitrag hat mir den Abend gerettet.
Merci! Einfach mal ein großes Dankeschön für den immer informativen Blog!
Hallo ich habe zwei fragen
1. Warum nicht einfach das plugin redirect nutzen?
mein zweite frage ist so ein bisschen im Rand bereich von das Thema, ich habe vor kurzem meine Permalink Struktur geändert, mit ein 301 redirect von alle Alten Adressen zu die neue Adressen, dies hat zu einige Problem geführt, aber die meisten konnte ich zwischen durch wieder beheben, eine Sache ist mir aber immernoch unklar.
2. Die ganzen Backlinks zu mein Alten Unterseiten, werden seit dem wo ich die Permalink Struktur geändert haben nicht mehr angezeigt, sind die verloren? Oder was ist damit passiert ?
Gruß, Morten
@Morten: Diese Umleitung hier ist eher für besondere Anforderungen von Entwicklern und Anwendern, die das Blog sehr verändern. Alternativ für diverse Weiterleitungen ist sicher die .htaccess oder das Plugin besser. Die sind weg, denn du hast ja die Permalinks geändert.
@Frank, Aha, das letzte wollte ich nicht so gerne hören (:
Die externen links funktionieren ja trotzdem durch mein redirect, von daher muss ich ja irgendwo auch Linkjuice erhalten? Oder wie bewertet google das?
@Kroatien blogger: Bitte keine SEO-Namen, die Kommentare werden gelöscht! Ich denke, dass der Link da ist, denn der Redirect verweist ja auf den.
Ahh! Sehr guter Tipp - so brauch ich nicht mit mächtigen Plugins etc rumhampeln.
Werde die Weiterleitung mal ausprobieren.
Schönen Tag noch
Ein exzellenter Tip. Hatte schon meine Probleme mit diesem Feature.
Also ich komme als Newbee und Bloganfänger leider noch nicht mit klar. Mal schaun ob ich das hinbekomme.....
Ich versuche seit Stunden den Redirect bei einem Nginx-Server hinzubekommen. Ich erhalte immer "no input file specified", wenn ich die Startseite aufrufen will. Backend funktioniert komischerweise (wp-backend). Hat jmd einen Tip?
Ich muste es zwar zweimal machen aber es hat funktioniert. Bei ersten mal gabs Fehlermeldungen die ich nicht erklären konnte. Gleiche Vorgehensweise beim zweiten mal und es hat funktioniert
Sehr interessant, leider bin ich erst jetzt darüber gestolpert, obwohl ich das Problem auch vor 2 Monaten hatte... es gibt einfach zu viele Seiten mit falschen oder eben nicht gleich zu findenden Lösungsansätzen....schade, man verliert gerade als Hobbyblogger leicht den Überblick.
@Frank: Immer wieder ein Dankeschön für die tollen Tipps. Ohne Dich wäre das "WordPress-Leben" bedeutet schwerer. Weiter so!
Danke für den Tipp. Mein Selbstversuch mit der Weiterleitung hat funktioniert - im dritten Versuch
Sehr cooler Tipp, mein Einbau ging schneller. Allerdings nicht wirklich. Bei mir hat es "nur" zwei Versuche gedauert, bis alles so gefunzt hat wie ich es wollte...
Hi Frank, hat wunderbar geklappt. Wenn du noch mehr Tricks auf Lager hast, bin immer offen dafür.