Sidebar
ein-/ausblenden

Umleiten mit WordPress

Plugin für WordPress SEO

Anzeige

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

20 Kommentare zu „Umleiten mit WordPress“

  1. 1
    Kommentar von Raoul

    Vielen Dank für dieses kleine, aber nützliche Plug-In. Können wir wahrscheinlich bald gut gebrauchen.

  2. 2
    Kommentar von Daniel

    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!

  3. 3
    Kommentar von Frank Bültge

    @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.

  4. 4
    Kommentar von Sebastian

    Hallo,
    Hab vielen Dank für den Super Tipp.
    ABER ;)
    Wenn ich das mache bekomme ich die Meldung

    Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\seite\wp-content\plugins\all-in-one-seo-pack\aioseop.class.php:221) in C:\xampp\htdocs\seite\wp-includes\pluggable.php on line 868

    (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);
    }

  5. 5
    Kommentar von Daniel

    @Frank: Alles klar. Hat geklappt. Vielen Dank.

  6. 6
    Kommentar von lukas

    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.

  7. 7
    Kommentar von Frank Bültge

    @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.

  8. 8
    Kommentar von lukas

    @Frank: danke, da hätte ich selbst drauf kommen können.
    was ich nicht verstehe wieso
    Redirect permanent /e/gallery/155/2009 /e/index.php
    funktioniert und
    Redirect permanent /e/gallery /e/index.php
    nicht? naja egal, vorerst klappts so und in der Zwischenzeit frische ich meine Apache-Kentnisse ein wenig auf ;-)

  9. 9
    Kommentar von Tanja

    Ich würde aber keinen 302er Status Code beim redirecten mitschicken, sondern stattdessen einen sauberen 301er ;-)

  10. 10
    Kommentar von Tobias

    Vielen Dank fürs hochladen..
    Hat mir sehr geholfen...
    Tobi

  11. 11
    Kommentar von Sascha

    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.

  12. 12
    Kommentar von Frank Bültge

    @Sascha: ja, dazu gibt es diverse Plugins, schau mal im Verzeichnis bei WordPress, eventuell nach Auto Link suchen

  13. 13
    Kommentar von Kalliey

    Perfekt. Der Beitrag hat mir den Abend gerettet. :D

  14. 14
    Kommentar von Silke

    Merci! Einfach mal ein großes Dankeschön für den immer informativen Blog!

  15. 15
    Kommentar von Morten

    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

  16. 16
    Kommentar von Frank Bültge

    @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.

  17. 17
    Kommentar von Kroatien blogger

    @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?

  18. 18
    Kommentar von Frank Bültge

    @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.

  19. 19
    Kommentar von uncleboob

    Ahh! Sehr guter Tipp - so brauch ich nicht mit mächtigen Plugins etc rumhampeln.
    Werde die Weiterleitung mal ausprobieren.
    Schönen Tag noch

  20. 20
    Kommentar von Jimbo

    Ein exzellenter Tip. Hatte schon meine Probleme mit diesem Feature.

Überlastung, Kommentare sind vorübergehend geschlossen

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!