Wir arbeiten an einem Lokalisierungsprojekt in WordPress. Tatsächlich können wir die aktive Browser-URL mit Sprachunterstützung korrekt hinzufügen. Ich werde die Details und den gesamten Code unten hinzufügen. Keine Sorge, meine Frage wird nicht so offen sein und ich werde sie konkretisieren.
Schritt 1
Zunächst sollten wir dem WordPress-Algorithmus eine Variable in der Linkstruktur hinzufügen.
function custom_rewrite_basic_query_vars( $query_vars ){
$query_vars[] = 'lang';
return $query_vars;
}
add_filter( 'query_vars', 'custom_rewrite_basic_query_vars' );
So erkennt WordPress eine Variable wie z ?lang=
und schließt es in den Abfragemechanismus ein.
Schritt 2
Mit der Funktion “add_rewrite_rule” müssen Sie die Variable hinzufügen ?lang= im Hintergrund der persistenten Linkstruktur von WordPress ausgeführt werden.
Einfaches Beispiel:
/*
LANG PREFIX + INDEX = localhost/en/ = localhost/?lang=en
*/
add_rewrite_rule(
'^(en|fr|de|ru|tr)/?$',
'index.php?lang=$matches[1]',
'top'
);
Ich werde die verbleibenden Instanzen nicht einzeln hinzufügen, da Sie fast 20 Umschreibungsregeln verwenden sollten. (Datum, Kategorie, Kommentar, Seite, Text, Paginierung usw.)
HINWEIS: Diejenigen, die an einem solchen Projekt arbeiten und diese Regeln verwenden möchten, werden es auf Anfrage hinzufügen.
Jetzt unterstützt unsere persistente Verbindungsstruktur Variablen für die Sprachoption.
localhost/en/hello-world
localhost/ru/hello-world
localhost/de/04/07/2019
localhost/fr/page/2
usw. alle Verbindungen, die Sie sich vorstellen können.
Schritt 3
Wenn eine Variable vom Browser erkannt wird (z. B.: lang = en), zeigen wir den Inhalt der zuvor gespeicherten intersprachlichen Übersetzung an.
An dieser Stelle benötigen wir keine Unterstützung. Aber wenn wir zu Schritt 4 kommen, stecken wir fest.
Schritt 4
Durch Aktivieren der zuvor hinzugefügten Präfix-Sprachvariablen können Benutzer bei Verwendung der Links innerhalb der Website auf alle Navigationslinks innerhalb der Website zugreifen.
Das bedeutet, wenn ein Benutzer Zugriff auf die localhost/fr/hello-world
Link, sie müssen den erreichen localhost/fr/contact
Link, wenn sie zur Homepage zurückkehren oder auf den Link Kontakt klicken.
Dazu müssen Sie allen Insite-Links das aktuell im Browser aktive Sprachpräfix hinzufügen.
Leider ist dies der einzige Punkt, an dem wir uns aufhalten und wir keine Lösung finden können.
Tatsächlich haben wir die meisten Dinge ausprobiert, bevor wir hier geschrieben haben. (Natürlich nach unserem Wissen). Wir haben uns sogar Plug-Ins angesehen, die eine gewisse Sprachunterstützung bieten.
z.B <WP Multilang>
Natürlich ist es so kompliziert und so viel Code. Wir haben nicht einmal das Plug-in verstanden.
Es gibt natürlich einen logischen Weg, dies zu tun, und ich hoffe, dass diese Person diesen Beitrag sieht und antwortet. Herzlichen Dank für all Ihre Unterstützung.
Ein Schritt zur Antwort
Nach einer Weile erreichte ich den folgenden Code und bestätigte, dass er korrekt funktionierte.
<?php
function link_fn( $url ){
$lang = get_query_var('lang', false);
if( $lang !== false && strpos( $url, $lang ) !== false )
$url = $url . $lang . "https://stackoverflow.com/";
return $url;
}
add_filter( 'shortcut_link', 'link_fn' );
add_filter( 'post_link', 'link_fn' );
add_filter( 'page_link', 'link_fn' );
add_filter( 'post_type_link', 'link_fn' );
add_filter( 'attachment_link', 'link_fn' );
add_filter( 'term_link', 'link_fn' );
add_filter( 'author_link', 'link_fn' );
add_filter( 'post_type_archive_link', 'link_fn' );
add_filter( 'day_link', 'link_fn' );
add_filter( 'month_link', 'link_fn' );
add_filter( 'year_link', 'link_fn' );
Aber an dieser Stelle stieß ich auf ein Problem. Hier bekommen wir Daten wie “localhost/hello-world/[LANG]/
“.
Was ich will ist “localhost/[LANG]/hello-world
“.
Um dieses Problem zu lösen, müssen Sie der vorhandenen URL-Struktur eine REGEX-Abfrage hinzufügen. Wenn sie die LANG nicht enthält, fügen Sie den Sprachcode zur BASIS-URL hinzu. Da eine REGEX-Abfrage hinzugefügt werden sollte, konnte ich dies nicht tun …
Ich möchte meine eigene Frage nicht beantworten und bestätigen. Zusätzlich zu dem Code, den ich oben geschrieben habe, werde ich, wenn es eine Antwort gibt, die die von mir gewünschte Abfrage enthält, diese als Antwort markieren.
Antworten
function link_fn( $url ){
$lang = get_query_var('lang', false);
$site_url = get_option('home');
if( $lang !== false )
{
$new_url = str_replace( $site_url, "", $url );
if( preg_match('/\b$lang\b/', $new_url) !== false )
{
$url = $site_url."https://stackoverflow.com/".$lang.$new_url;
}
}
return $url;
}
add_filter( 'home_url', 'link_fn' );
Wie gelangt ein Benutzer zu den verschiedenen Sprachen? Sie könnten einfach ein Cookie in ihrem Browser mit ihrer Sprachauswahl speichern und dann das Cookie lesen, um sicherzustellen, dass der URL die Sprachabkürzung angehängt wird. Auch WPML (wpml.org) ist wahrscheinlich eines der am einfachsten zu verwendenden mehrsprachigen Plugins – und bietet gleichzeitig wirklich nette erweiterte Funktionen.
– Desinformation
12. September 2019 um 18:03 Uhr
Möchten Sie basierend auf der Browsersprache des Benutzers umleiten? WPML nutzt es gut.
– Ohrid
14. September 2019 um 3:48 Uhr