Ich habe ein Sprach-Plugin für WordPress entwickelt, das vollständig funktioniert. Jetzt fehlt nur noch das URL-Rewriting. Ich habe mir viele Websites, Quellen und andere Fragen zu Stackoverflow angesehen, aber ich kann meine Permalinks nicht zum Laufen bringen.
Ich konnte eine Abfragezeichenfolgenvariable wie folgt hinzufügen:
public function append_query_string($url)
{
$args = array('lang' => $this->get_locale());
return add_query_arg($args, $url);
}
add_filter('page_link', array($this, 'append_query_string'));
add_filter('post_link', array($this, 'append_query_string'));
add_filter('the_permalink', array($this, 'append_query_string'));
Dies ändert meine Links zu http://www.mylink.com?lang=en_us
zum Beispiel. Was ich jetzt möchte, ist, ein Permastruct hinzuzufügen, damit Benutzer hübsche URLs haben können (z http://www.mylink.com/en/
)
Ich habe das folgende Stück Code hinzugefügt:
public function add_query_var($vars)
{
$vars['lang'] = $this->get_locale();
return $vars;
}
add_filter('request' , array($this, 'add_query_var'), 10, 2 );
public function custom_permastruct()
{
add_permastruct('language', '%lang%', false);
}
add_action('wp_loaded', array($this, 'custom_permastruct'));
Das einzige, was ich jetzt brauche, ist eine Rewrite-Regel, nehme ich an, aber ich könnte mich total irren. Wer weiß, was die beste Lösung ist, um dieses Permastruct hinzuzufügen?
BEARBEITEN
Ich versuche seit einem Monat, dies zum Laufen zu bringen, und ich scheine nicht in der Lage zu sein, Permalinks zu verstehen, nicht einmal mit all den vorherigen Antworten und meinen eigenen Recherchen. Deshalb fülle ich diesen Beitrag noch einmal mit einem Kopfgeld aus. Was ich brauche: Ich habe eine Funktion (get_locale), die einen Sprachcode zurückgibt. Dieser Sprachcode sollte in meiner URL wie folgt implementiert werden: "http://www.mywebsite.com/LANGUAGE_HERE/..."
Ich weiß, dass ich dafür meine eigene Permalink-Struktur registrieren muss, aber da läuft alles schief. Welche Filter benötige ich und was sollte ich in meine Filterfunktionen einbauen? Jede Hilfe ist sehr willkommen, denn ich bin hier ziemlich verzweifelt.
BEARBEITEN 2
Also habe ich Rewrite-Regeln hinzugefügt, aber sie scheinen auch nicht zu funktionieren. Ich bin hier langsam etwas verzweifelt. Wie auch immer, dies ist der Code für die Rewrite-Regeln:
public function add_rewrite_rules()
{
$languages = $this->get_all_languages();
foreach($languages as $language) {
add_rewrite_rule('^' . $language->code . '/([^/]*)/?$', 'index.php?lang=$matches[1]', 'top');
}
}
add_action('init', array($this, 'add_rewrite_rules'));