Für Menschen · Seien Sie begeistert und Sie werden begeistern !
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' );
Ich bin urlaubsreif, ersticke in Arbeit und damit auch für die Leser des Weblogs nicht zu erreichen. Bitte geduldet euch ein wenig mit Supportanfragen.
Leider muss ich die Kommentarfunktion deaktivieren, ansonsten würde ich weiter in Arbeit ersticken oder die Anfragen nicht nach bestem Gewissen beantworten.
Vielen Dank für das Verständnis!
bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.
Das Weblog wird angetrieben von WordPress und aktuell gibt es 854 Beiträge, 15036 Kommentare in 14 Kategorien und 450 Tags.
Das Blog wird liebevoll mit xHTML & CSS in Handarbeit gestaltet.
Design und Code ist unter Copyright
© 2001 - 2010 bueltge.de [by:ltge.de]
13. Januar 2010 um 13:50
Vielen Dank für dieses kleine, aber nützliche Plug-In. Können wir wahrscheinlich bald gut gebrauchen.
13. Januar 2010 um 17:47
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!
13. Januar 2010 um 19:01
@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.
13. Januar 2010 um 22:01
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);
}
14. Januar 2010 um 11:04
@Frank: Alles klar. Hat geklappt. Vielen Dank.
14. Januar 2010 um 15:20
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 wirdhttp://kinglaurinpark.it/e/gallery/155/2009funktioniert das ganze logisch nicht mehrKurz und bündig wäre mir am liebsten wenn alle URL's die nicht
http://kinglaurinpark.it/e/sind, dorthin umgeleitet werden.14. Januar 2010 um 15:34
@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.
14. Januar 2010 um 16:09
@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
14. Januar 2010 um 18:12
Ich würde aber keinen 302er Status Code beim redirecten mitschicken, sondern stattdessen einen sauberen 301er
14. Januar 2010 um 18:16
Vielen Dank fürs hochladen..
Hat mir sehr geholfen...
Tobi
15. Januar 2010 um 09:21
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.
15. Januar 2010 um 10:02
@Sascha: ja, dazu gibt es diverse Plugins, schau mal im Verzeichnis bei WordPress, eventuell nach Auto Link suchen
18. Januar 2010 um 00:26
Perfekt. Der Beitrag hat mir den Abend gerettet.
20. Januar 2010 um 23:47
Merci! Einfach mal ein großes Dankeschön für den immer informativen Blog!
24. Januar 2010 um 01:16
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
26. Januar 2010 um 14:52
@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.
26. Januar 2010 um 15:19
@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?
3. Februar 2010 um 12:03
@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.
5. Februar 2010 um 15:12
Ahh! Sehr guter Tipp - so brauch ich nicht mit mächtigen Plugins etc rumhampeln.
Werde die Weiterleitung mal ausprobieren.
Schönen Tag noch
22. Februar 2010 um 14:47
Ein exzellenter Tip. Hatte schon meine Probleme mit diesem Feature.