Umleitung bei fehlender übersetzung
-
Hallo,
kann ich die Seite beeinflussen auf die man umgeleitet wird, wenn ein Beitrag in einer anderen Sprache nicht vorhanden ist? Aktuell werde ich auf die Startseite weitergeleitet, grunds?tzlich w?re aber so etwas wie ein Hinweis “Diese Seite ist in ihrer Sprache aktuell nicht verfügbar” dauerhaft auch recht benutzerfreundlich. Gibt es so etwas
Beste Grü?e
-
Hallo,
für die URL des Weiterleitungsziels existiert allgemein der Filter
mlp_redirect_url
. Dort bekommst du drei Argumente übergeben:- die URL (ach was!? ?? );
- ein Array mit den folgenden Elementen:
priority
: Priorit?t der Sprache der Zielsite;url
: die URL (das gleiche wie das erste Argument);language
: Sprache der Zielsite (HTTP-Code);site_id
: die ID der Zielsite;
- die ID der aktuellen Site.
Du k?nntest also eine Funktion in den Filter einh?ngen und prüfen, ob die Ziel-URL die Startseite ist (und ob die aktuelle Seite NICHT die Startseite ist?). Das k?nnte z.B. so aussehen:
add_filter( 'mlp_redirect_url', function ( $url, array $match ) { if ( is_home() || is_front_page() ) { return $url; } $lang = str_replace( '-', '_', $match['language'] ); $home_url = get_home_url( $match['site_id'] ); $home_url = trailingslashit( $home_url ); $home_url = add_query_arg( 'noredirect', $lang, $home_url ); if ( $home_url !== $url ) { return $url; } /* * Build your desired target URL and return it. * * If you still want to redirect to a site in your network, * but only want to manipulate the target URL, * you might want to add the noredirect query arg to the URL. * This is done with the following line, * assuming you already set up the URL in $url: */ return add_query_arg( 'noredirect', $lang, $url ); }, 10, 2 );
Bei Fragen: einfach fragen.
Ein Hinweis wie von dir beschrieben ist aktuell nicht m?glich und auch nicht vorgesehen.
Hallo Thorsten,
danke für die ausführliche Antwort.
Ich verstehe gerade nur nicht an welcher Stelle jetzt bspw.
$url = https://example.com
;
stehen müsste.K?nnte ich den Filter dann grunds?tzlich einfach in der functions.php meines Child Themes neu definieren?
Schade, was den Hinweis angeht. Im Moment bekommt der Nutzer ja leider keinerlei Rückmeldung diesbezüglich, dass es an der Sprache liegt und nicht ein anderer Fehler aufgetreten ist.
Hallo, war meine Rückfrage zu trivial? Ich bin mir tats?chlich nicht sicher, wo die URL gesetzt wird.
Hallo,
und Sorry, ich war mir sicher, das Topic beantwortet zu haben – dem ist aber offensichtlich nicht so.
Ich verstehe gerade nur nicht an welcher Stelle jetzt bspw.
$url = https://example.com;
stehen müsste.Das muss genau da passieren, wo der Kommentarblock steht.
Je nachdem, was/wo das Ziel liegt, willst du vielleicht noch dennoredirect
Parameter an die URL anh?ngen – das hatte ich bereits vorbereitet. In dem Fall müsstest du dort, wo der Kommentar ist, einfach die Variable$url
so setzen, wie du sie brauchst.
Falls du dennoredirect
-Parameter nicht brauchst, dann kannst du die Zeile mit demreturn
ganz einfach durchreturn 'deine-url-hier';
ersetzen.K?nnte ich den Filter dann grunds?tzlich einfach in der functions.php meines Child Themes neu definieren?
Der Filter kann in deinem Theme, einem Plugin oder einem MU-Plugin genutzt werden, genau.
Schade, was den Hinweis angeht. Im Moment bekommt der Nutzer ja leider keinerlei Rückmeldung diesbezüglich, dass es an der Sprache liegt und nicht ein anderer Fehler aufgetreten ist.
Das Problem an der Sache ist, dass so eine Meldung nur über einen Systemdialog (z.B. ein
alert()
) oder aber durch injiziertes Markup (und damit verbunden CSS und JavaScript) realisiert werden kann. Beide M?glichkeiten wirken wie ein (st?rendern, wenn auch informierender) Fremdk?rper, und die zweite L?sung beinhaltet einfach zu viel Ballast.hi thorsten,
ich greif das Thema hier nochmal auf, weil ich am selben Problem sitze.
Ich m?chte eine Weiterleitung definieren für Events (Post Type). Mir ist es zu aufwendig, jedes Event mit seinem Gegenüber abzugleichen, das würde aber auf jeden Fall gehen.
Nun m?chte ich es allerdings so, dass, wenn das engl event gelesen werden soll, eine Seite angezeigt wird: “only in German Language” oder so. Aber irgendwie kann ich nur denselben Post Type als Gegenüber verwenden.Da kam mir die L?sung hier genau recht, allerdings funktioniert es nicht. Als Link wird immernoch die Startseite angezeigt.Ich habe, wie angegebn auch die URL in der return Zeile eingebaut.
H?ttest du eine Idee?
Noch ein Hinweis: ich hatte es mit dem Widget probiert, da kann man ja anhaken “Zeige nur Links für übersetzte Inhalte. ” – das scheint aber nicht zu funktionieren.
VG
andré-
This reply was modified 8 years, 1 month ago by
afreyer.
Hi André,
bitte beim n?chsten Mal gerne ein eigenes Topic aufmachen, danke.
Ich befürchte, ich habe nicht genau verstanden, was du willst bzw. wie dein Netzwerk aussieht.
Du hast einen Custom Post Type Event, der in mehreren/allen Sites aktiv ist. Du hast aber nur in der deutschen Site Events?
Was genau m?chtest du, dass die User sehen?
Was verwendest du für die Darstellung von anderen Sprachen? Menü? Widget? Quicklinks?Du kannst auf jeden Fall nicht eine echte Seite (oder einen Post egal welches Typs) mit mehreren Posts in einer Site verknüpfen.
Ich br?uchte hier eine etwas genauere Beschreibung.
Viele Grü?e,
Thorstenhi thorsten,
ich h?tte gern eine M?glichkeit, mit einer Seite “keine übersetzung” oder so zu verknüpfen. oder aber die Option greift wieder im Widget, dass nur übersetzte Inhalte verlinkt werden. Momentan funktioniert dies nicht.VG
andréfollow-up
Hi André,
also, du sagst, wenn du im Widget “Zeige nur Links für übersetzte Inhalte.” gesetzt hast, dann werden dir trotzdem immer und überall Links (also das Widget) angezeigt? Das sollte so nicht sein, und es ist mir auch bislang nicht bekannt, dass es da Probleme gibt…
Zur Verknüpfung noch einmal: du kannst keine echte Seite mit (etlichen) Posts verknüpfen. Du kannst lediglich unter gewissen Bedingungen eine Seite anzeigen. Als Besucher würde ich mich aber nicht wirklich freuen, wenn ich einen Link für einen englischen Post klicke, und nach dem Laden der neuen Seite dann eine Nachricht à la “Gibt es nur in Deutsch” zu Gesicht bekomme. Hier ist benutzerfreundlichere Weg definitiv, erst gar keinen Link anzuzeigen (oder halt auf die Startseite zu verlinken, wenn man immer einen Link haben will).
Ich würde hier daher eher das Widget debuggen. Also nachsehen, warum doch ein Link angezeigt wird.
Oder sorgst du vielleicht selbst dafür, dass der Link erzeugt wird, weil du den obigen Code-Snippet (in ?hnlicher Form?) eingebunden hast?
Freundliche Grü?e,
Thorstenhey Thorsten,
ja genau. eigentlich stell das nur eine Notl?sung dar, weil das Widget H?kchen nicht greift. Vom obigen Code ist nichts eingebaut – hab natürlich gleich geschaut, weil ich gehofft hatte, dass es daran lag..
Was kann ich fürs debuggen einbringen?VG
andréauf beiden sites ist das Widget aktiviert und das H?kchen gesetzt, dass nur vorhandene übersetzungen verlinkt werden sollen. Allerdings gibt es den Link immernoch, auch wenn ich die Beziehung gel?scht habe. Dann allerdings führt mich der Link auf die Startseite des Gegenstücks. und das verwirrt u ist bestimmt nicht so gedacht..
Hi André,
kann ich mir das selbst irgendwo anschauen?
Zuerst h?tte ich an Caching gedacht, aber dann schriebst du, dass das L?schen einer Beziehung korrekt verarbeitet wird (also halbwegs korrekt ?? ).
Kannst du vielleicht mal (sofern du das nicht eh bereits mehrmals gemacht hast) beim Widget das H?kchen rausnehmen, speichern, H?kchen wieder rein, speichern, und schauen, ob sich irgendwas getan hat…?
Ich bastel gerade einen Code-Schnipsel zum Debuggen. Melde mich dann noch mal hier.
Viele Grü?e,
Thorstenhi thorsten,
cool! ja, gern. ich kann dir ne PM mit der URL schicken und gern auch einen account anlegen. Das mit dem H?kchen raus und speichern und wieder rein hab ich schon gemacht. Probiers aber gleich nochmal, man weiss ja nie! ??Vielen Dank schonmal. VG
andréHi,
Zugangsdaten brauche ich nicht wirklich. Wenn das H?kchen gesetzt ist, ist es gesetzt. ??
Du k?nntest aber folgenden Code mal in ein MU-Plugin oder in die
functions.php
deines Themes reinnehmen:add_action( 'dynamic_sidebar', function () { is_user_logged_in() && add_filter( 'mlp_linked_elements_html', function () { wp_die( '<pre>' . print_r( func_get_args(), true ) . '</pre>' ); }, PHP_INT_MAX, PHP_INT_MAX ); } );
Beim Besuch als angemeldeter Benutzer stirbt die Seite dann beim Erstellen des Widgets und gibt die Konfiguration etc. aus.
Das siehst du dann in der Sidebar. Die Ausgabe bitter hier reinkopieren.Danke!
Thorsten-
This reply was modified 8 years, 1 month ago by
Thorsten Frommen.
Array ( [0] => English (UK) [1] => Array ( [2] => Array ( [url] => https://www.xxxxxxxxxxxxxxxx.com/?noredirect=en_GB [http] => en-GB [name] => English (UK) [priority] => 1 [icon] => https://www.xxxxxxxxxxxxxxxx.de/wp-content/plugins/multilingual-press/assets/images/flags/en.gif ) ) [2] => Array ( [link_text] => native [display_flag] => [sort] => priority [show_current_blog] => [strict] => ) )
-
This reply was modified 8 years, 1 month ago by
afreyer.
- The topic ‘Umleitung bei fehlender übersetzung’ is closed to new replies.