Le but est que cela fonctionne:
www.pageurl.de -> rien ne se passe
www.pageurl.de/en/ -> une variable est définie et stockée dans un cookie
cela nécessite également de travailler avec des permaliens, des catégories, etc. comme ceci:
www.pageurl.de/en/linktopost/
www.pageurl.de/en/categoryname/
j'ai essayé de travailler avecadd_rewrite_endpoint('en',EP_PERMALINK|EP_PAGES|EP_ROOT|EP_CATEGORIES);
mais le point final (qui a du sens) ne fonctionne qu'à la fin de l'URL
j'ai aussi essayé de travailler avec
$language="en"; add_rewrite_rule('^' . $language . '/([^/]*)/?$', 'index.php?lang=$matches[1]', 'top');
mais www.pageurl.de/en/ ne renvoie qu'un 404
Quelle est la meilleure façon de procéder?
J'ai besoin d'avoir le modèle de langue dans l'URL sur la page entière, disons qu'après avoir changé la page dans un menu, le "en" doit être dans l'URL.
Vous ne pouvez pas faire cela en ajoutant simplement une règle de réécriture, vous devez modifier toutes les règles enregistrées.
Voici un moyen simple de faire cela:
function my_rewrite_rules($rules) {
$new_rules = array();
$new_rules['(?:de|en)/?$'] = 'index.php';
foreach ($rules as $key => $val) {
$key = '(?:de|en)/?' . $key;
$new_rules[$key] = $val;
}
return $new_rules;
}
add_filter('rewrite_rules_array', 'my_rewrite_rules', 11);
Vous avez maintenant besoin d'un moyen de recevoir la valeur de la langue afin de la sauvegarder dans un cookie.
Vous pouvez ajouter un paramètre pour la langue, afin de l'inclure dans le $_GET
super global. Mais cela signifierait de compenser tous les autres paramètres de toutes les autres règles, et cela impliquerait beaucoup de regex.
Au lieu de cela, vous pouvez simplement obtenir le langage en interrogeant le $_SERVER
global:
preg_match('/\/(de|en)(\/|$|\?|#)/', $_SERVER['REQUEST_URI'], $matches);